Neural Network
- 신경망 퍼셉트론은 가중치, 편향등의 매개변수 설정 작업을 사람이 수동으로 했음.
- 활성화 함수 영어로는 Activation Function. 입력 신호의 총합을 출력 신호로 변환하는 함수를 지칭함.
이를 개선하기위해, 매개변수의 적절한 값을 데이터로부터 자동으로 학습하도록 신경망이 나옴.
구성은 보통 입력층 / 출력층 / 은닉층 으로 이루어짐.
활성화 함수를 통해 입력 신호의 총합이 활성화를 일으키는지 정함.
신경망에서는 활성화 함수로 비선형 함수를 사용해야 함. 만약 선형 함수를 사용한다면, 층을 깊게해도 의미가 없기때문.
예를 들어, $h(x) = cx$ 라는 활성화 함수가 있으면 이를 3층으로 겹쳐도 $h(x) = c*c*cx$가 되고 사실상 $h'(x) = c'x$와 같은 식이되어 의미가 없어짐.
따라서, 아래의 종류와 같은 활성화 함수를 사용함.
- 파이썬으로 구현
def sigmoid(x):
return 1 / (1 + np.exp(-x))
X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()
$$ h(x) = \begin{cases}0 & (x \leq 0) \\ x & (x > 0) \end{cases} $$
- 파이썬으로 구현
def relu(x):
return np.maximum(0, x)
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()
$$ y_k = \frac{\exp(a_k)}{\sum_{i=1}^n \exp(a_i)} $$
- 파이썬으로 구현
def softmax(x):
if x.ndim == 2:
x = x.T
x = x - np.max(x, axis=0)
y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T
x = x - np.max(x) # 오버플로 대책
return np.exp(x) / np.sum(np.exp(x))
=> 소프트맥스 함수의 출력을 '확률'로 해석해도 무방.
$ y = \exp(x) $가 단조 증가 함수이므로, 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않음.
=> 신경망으로 분류할 때는 출력층의 소프트맥스 함수를 생략함.(일반적으로)
w1, w2, w3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, w1) + b1 # 입력층 -> 1층 신호(=값, =데이터) 전달
z1 = sigmoid(a1) # 1층에서의 활성화 함수 처리
a2 = np.dot(z1, w2) + b2 # 1층 -> 2층
z2 = sigmoid(a2) # 2층에서의 활성화 함수 처리
a3 = np.dot(z2, w3) + b3 # 2층 -> 출력층
y = softmax(a3) # 출력층의 활성화 함수 처리
회귀(regression) => 항등 함수
분류(classification) => 소프트맥스 함수
위와 같이 사용함.분류(classification) => 소프트맥스 함수
- 정규화 Normalization. 데이터를 특정 범위로 변환하는 처리.
- 데이터 전체 분포 고려 데이터 전체 평균과 표준편차를 이용하여 데이터들이 0을 중심으로 분포하도록 이동. 데이터의 확산 범위 제한.
- 데이터 백색화 = whitening 전체 데이터를 균일하게 분포시킴.
배치 처리는 컴퓨터로 계산 시 큰 이점을 줌. 이미지 1장당 처리 시간이 대폭 줄어드는데, 그 이유는
- 수치 계산 라이브러리 대부분이 큰 배열을 효율적으로 처리할 수 있도록 고도록 최적화 되어있음.
- 커다란 신경망에서는 데이터 전송이 병목으로 작용하는 경우가 자주 있는데, 배치 처리를 함으로써 버스에 주는 부하가 줄어듬. => 느린 I/O를 통해 데이터를 읽는 횟수가 줄고 빠른 CPU(또는 GPU)로 순수 계산을 수행하는 비율이 높아짐.
이러한 Feature에는 SIFT, SURF, HOG 등이 있음. 다크 프로그래머 님이 비교 정리 잘 해놓으신 블로그
Feature를 이용해 변환된 벡터들을 가지고 SVM, KNN 과 같은 지도 학습 방식의 분류 기법을 사용해 학습할 수 있음.
위가 기계학습을 이용한 것이면, 신경망=딥러닝 에서는 특징 추출과 기계학습을 모두 기계가 스스로 학습함. 그래서 딥러닝을 종단간 기계학습=end-to-end machine learning 이라고도 함.
검증 데이터 = Validation Data : 하이퍼파라미터 성능 평가
시험 데이터 = Test Data : 신경망의 범용 성능 평가
댓글
댓글 쓰기