(혼자 공부하는 머신러닝+딥러닝 내용을 포함합니다)
인공 신경망에서는 검증을 할 때 주로 검증 세트를 따로 분리해서 사용한다.
밀집층
완전 연결층
활성화 함수
심층신경망
LeRU 함수
활성화 함수(activation function)의 종류
sigmoid 함수의 단점인 기울기 소실(gradient vanishing)문제 등을 해결하기 위해 나온 활성화 함수
심층 신경망에서 좋은 성능을 보여줌.
입력이 양수일 경우 입력 그대로를 출력하고, 음수이면 0을 출력한다.
max(0, z): z가 0보다 크면 z를 출력하고 0보다 작으면 0을 출력한다.
특히 이미지 처리에서 좋은 성능을 낸다고 알려져 있음
각각의 입력이 출력에 끼치는 영향을 알고, 가중치를 조절하기 위해 오차역전파(Backpropagation) 알고리즘을 사용한다. 그런데 이 알고리즘을 사용하여 층이 10개 이상으로 많아지고 출력부터 입력까지 미분 값을 연쇄법칙으로 계산해오면, 시그모이드 함수를 이용한 경우 0에서 1까지의 소숫점 값이 계속 곱해지다보니 입력이 출력에 끼치는 영향이 거의 0에 가까운 것을 발견하였다. 이렇게 되면 학습이 잘 이루어지지 않아서, 최근에는 시그모이드 함수를 잘 이용하지 않고 렐루를 많이 사용하는 것이다.
드롭아웃(Drop-out)
co-adaptation이란?
어떤 특성이 집단의 생존에 유리하게 작용하면 이 특성은 후세에 더 잘 발현하고 진화하고, 반대로 불리한 특성은 퇴화하다가 발현하지 않는다는 생물학 이론에서 온 개념으로, 신경망 내부에서도 일어난다.
신경망에서 보면 학습 진행시 인접레이어 노드의 영향을 받아 학습할 수 밖에 없는 구조를 가지고 있는데, 예측하는데 유리한 신호가 입력된 노드에는 가중치를 더하는 방향으로, 불리한 신호가 들어온 노드에는 가중치를 적게 하는 방향으로 학습한다. 이 과정을 통해 학습데이터를 과도하게 학습하게 되고 실제 데이터는 잘 예측하지 못하게 된다.(과적합을 말하는 듯)
콜백(callback)
callback = tf.keras.callbacks.LambdaCallback(on_epoch_begin=lambda epoch, logs: print('We are starting epoch {}'.format(epoch +1 )))
model.fit(dataset, epochs=10, callbacks=[callback])
#loss가 3번 동안 나아지지 않으면 훈련을 종료하는 callback