전체 글 (18) 썸네일형 리스트형 기울기 앞 절의 편미분 에서는 x0 와 x1의 편미분을 따로따로 계산했다. 그럼 x0와 x1의 편미분을 동시에 계산하려면 어떻게 해야할까? 가령 x0 = 3 , x1 = 4 일 때 (x0, x1) 양쪽의 편미분을 묶어서 계산한다고 생각해보자. 이때 $\left(\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial x_1}\right)$(∂f∂x0,∂f∂x1) 처럼모든 변수의 편미분을 벡터로 정리한 것을 기울기(gradient) 라고 한다. 기울기는 예를 들어 다음과 같이 구현할 수 있다. import numpy as np import matplotlib.pylab as plt from mpl_toolkits.mplot3d import Axe.. 편미분 아래의 식을 한번 살펴보자. 우리가 평상시 보던 함수와는 무언가 구조가 다르다. 앞의 예와는 달리 변수가 2개라는 점이 다르다. 이 식은 파이썬으로 다음과 같이 구현 할 수 있다. def function(x): return x[0]**2 + x[1]**2 # 인수 x는 numpy배열이라고 가정. 인수 x는 넘파이배열이라고 가정한다. 이 코드는 넘파이 배열의 각 원소를 제곱하고 그 합을 구할 뿐인 간단한 구현이다. ( np.sum(x**2) ) 로 구현 가능. 이 함수를 그래프로 그려보면 다음과 같다. 위의 식을 미분해보자. 여기서 우리가 배워왔던 미분과는 다른 점이 있다면, 변수가 2개라는 것이다. 그래서 “ 어느 변수에 대한 미분이냐 “, 즉 x0 와 x1중에 어느 변수에 대한.. 수치 미분 ( numerical differentiation ) 우리가 마라톤 선수라고 가정하고, 10분에 2km씩 뛰었다고 가정해보자. 이때의 속도는 간단히 거리 = 속력 * 시간 이므로, 2 / 10 = 0.2[km/분]이라고 계산 한다. 즉 1분에 0.2km만큼의 속도 (변화)로 뛰었다고 해석한다. 이 마라톤 에서는 ‘달린 거리’가 ‘시간’에 대해서 얼마나 변화했는가를 계산 했다. 다만 여기에서 10분에 2km를 뛰었다는 것은, 정확하게 10분 동안의 ‘평균 속도’를 계산한 것이다. 미분은 “ 특정 순간의 변화량 “ 을 의미한다. 그래서 10분이라는 시간을 가능한 한 줄여 ( 직전 1분에 달린 거리, 직전 1초에 달린 거리, 직전 0.1초에 달린 거리, …. lim를 생각해보자.) 한 순간의 변화량 ( 어느 순간의 속도 ) 를 얻는 것이다. .. 왜 손실함수를 사용하는가? 그런데 왜 굳이 손실 함수를 사용해야 하는 걸까? 예컨대 숫자 인식의 경우도 우리의 궁극적인 목표는 높은 “ 정확도 “ 를 끌어내는 매개변수 값을 찾는 것이다. 그렇다면 “ 정확도 “ 라는 지표를 놔두고 “ 손실 함수의 값 “ 이라는 우회적인 방법을 택하는 이유는 뭘까? 이 의문은 신경망 학습에서의 “ 미분 “ 의 역할에 주목한다면 해결 된다. 신경망 학습에서는 최적의 매개변수 ( 가중치와 편향 ) 를 탐색할 때 손실 함수의 값을 가능한 한 작게 하는 매개변수 값을 찾게 된다. 이때 매개변수의 미분 ( 기울기 ) 를 계산하고, 그 미분 값을 단서로 매개변수의 값을 서서히 갱신하는 과정을 반복한다. 가령 가상의 신경망이 있다고 가정하고, 그 신경망의 어느 한 가중치 매개변수에 주목한다.. 미니 배치 학습 기계학습 문제는 훈련 데이터를 사용해 학습한다. 더 구체적으로 말하면 훈련 데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾아낸다. 이렇게 하려면 모든 훈련 데이터에 대한 손실 함수를 구해야 한다. 극단적으로 훈련 데이터가 1억개라면, 손실함수의 연산을 1억번 해야한다는 것이다. 지금까지는 데이터 하나에 대한 손실 함수만 생각해봤으니, 이제 훈련 데이터 모두에 대한 손실 함수의 합을 구하는 방법을 생각해보자. 예를 들어 교차 엔트로피 오차는 아래의 식처럼 된다. 이 때 데이터가 N개라면, t_nk 는 n 번째 데이터의 k번째 값을 의미한다. ( y_nk는 신경망의 출력, t_nk는 정답 레이블 이다). 수식이 좀 복잡해 보이지만, 데이터 하나에 대한 손실 .. 교차 엔트로피 오차 ( Cross Entropy Error, CEE ) 손실 함수로서, 교차 엔트로피 오차 ( Cross Entropy Error , CEE ) 도 자주 이용한다. cee의 식 Y는 신경망의 출력, T는 정답 레이블이다. 또 T는 정답에 해당하는 인덱스의 원소만 1이고 나머지는 0이다( ONE-HOT ENCODING ) 그래서 위의 식은 실질적으로 정답일 때의 추정(T가 1일 때의 Y)의 자연로그를 계산하는 식이 된다. ( 정답이 아닌 나머지 모두는 T가 0이므로, log와 연산이 되어도 결과에 영향을 주지 않는다.) 즉, 교차 엔트로피 오차는 정답일 때의 출력이 전체 값을 정하게 된다. 자연로그 y= logx 의 그래프 이 그림에서 보듯이 x가 1일때는 y는 0이 되고, x가 0에 가까워질수록 y의 값은 점점 작아진다. 위의 식도 마찬가지.. tensorflow CNN (합성곱) 에서의 conv2d tf.nn.conv2d(x, W, strides=[1,1,1,1], padding='SAME') 합성곱 연산은, 이름 그대로 합성곱 신경망에서 계층이 연결되는 가장 기본적인 방법이다. 텐서플로에서 기본 제공되는 conv2d()함수를 사용한다. 여기의 x는 입력 이미지 또는 네트워크를 따라 이전 합성곱 계층들에서 얻어진 아래층의 특징 맵 데이터이다. 이전에 설명한 것처럼 일반적인 CNN 모델에서는 합성곱 계층을 층층이 쌓아 올리는데 Feature map은 일반적으로 이들 각 계층의 출력을 칭하는 말이다. 각 계층의 출력을 필터와 몇몇 연산을 적용한 결과인 "처리된 이미지"로 생각하는 것도 한 방법이다. 여기서 필터는 합성곱 필터를 나타내는 네트워크의 학습된 가중치인 W로 매개변수화된다. conv2d의 매개.. 손실 함수와 평균 제곱 오차 ( MSE ) 신경망 학습에서는 현재의 상태를 “ 하나의 지표 “로 표현한다. 그리고 그 지표를 가장 좋게 만들어주는 가중치 매개변수의 값을 탐색하는 것이다. 신경망 학습에서 사용하는 지표는 “ 손실 함수 ( Loss function ) “ 라고 한다. 이 손실 함수는 임의의 함수를 사용할 수도 있지만, 일반적으로는 평균 제곱 오차와 교차 엔트로피 오차를 사용한다. NOTE_ 손실 함수는 신경망 성능의 ‘나쁨’을 나타내는 지표로, 현재의 신경망이 훈련 데이터를 얼마나 잘 처리하지 ‘못’히는를 나타낸다. ‘성능 나쁨’을 지표로 한다니 무언각 부자연스럽지만, 손실 함수에 마이너스만 곱하면 ‘얼마나 나쁘지 않나?‘, 즉 ‘ 얼마나 좋으냐’라는 지표로 바뀌게 된다. 성능의 ‘나쁨’과 성능의 ‘좋음’ 중 어느 쪽.. 이전 1 2 3 다음