페이지

2022년 7월 17일 일요일

2.3 신경망의 톱니바퀴: 텐서 연산

 컴퓨터 프로그램을 이진수의 입력을 처리하는 몇 개의 이항 연상(AND, OR, NOR등)으로 표현할 수 있는 것처럼, 심층 신경망이 학습한 모든 변환을 수치 데이터 텐서에 적용하는 몇 종류의 텐서 연산(tensor operation)으로 나타낼 수 있습니다. 예를 들어 텐서 넛셈이나 텐서 곱셈 등입니다.

첫 번째 예제에서는 Dense 층을 쌓아서 신경망을 만들었습니다. 케라스의 층은 다음과 같이 생성합니다.

keras.layers.Dense(512, activation='relu')

이 층은 2D 텐서를 입력으로ㅓ 받고 입력 텐서의 새로운 표현인 또 다른 2D 텐서를 변환하는 함수처럼 해석할 수 있습니다. 구체적으로 보면 이 함수는 다음과 같습니다.(W는 2D 텐서고, b는 벡터입니다. 둘 모두 층의 속성입니다).

output = relu(dot(W, input) + b)

좀 더 자세히 알아보겠습니다. 여기에선 3개의 텐서연산이 있습니다. 입력 턴서와 턴서 W사이의 점곱(dot), 접곱의 결과인 2D 텐서와 벡터 b사이의 덧셈(+), 마지막으로 relu(렐루) 연산입니다. relu(x)는 max(x, 0)입니다.


이 절은 선형대수학(linear algebra)을 다루지만 어떤 수학 기호도 사용하지 않습니다. 수학에 익숙하지 않은 프로그래머는 수학 방정식보다 짧은 코드를 보는 것이 수학 개념을 이해한는 데 훨씬 도움이 됩니다. 앞으로도 계속 넘파이 코드를 사용하여 설명합니다.

댓글 없음: