머신러닝, 딥러닝 : 적절한 예측을 도출해내는 최적의 함수 찾기
= 가중치 update하여 학습 진행
AlexNet(12) => VGG(14) => GoogLeNet(14) => ResNet(15)
딥러닝은 매우 유연하고 확장성 있는 모델을 구성함
+ feature extractor까지 스스로 진행
=> 다양한 영역 (영상, 음성, 자연어 등등)의 최적화 문제 해결책 제시
물론 그만큼 많은 컴퓨팅 연산 필요 : GPU
딥러닝 전체 개요
1) 입력된 데이터와 초기 가중치 값들을 가지고 weighted sum + activation function 적용하여 예측값 도출
2) 도출된 예측값, 실제값의 차이를 계산 (: loss func)하여 이를 줄이는 방향(: weight 값 조절 => GD 사용)으로 학습 재진행
-weighted sum
Activation Function
활성화 함수 : acivation function
: 딥러닝 네트워크에 비선형성 적용 => 좀 더 복잡한 함수들을 근사할 수 있도록 해줌
sigmoid | hyperbolic tangent | recified linear unit : ReLU |
이진 분류 마지막에 사용 | 은닉층에 사용 //다양한 변형 존재 | |
-입력값이 클 때 Gd 변화가 거의 없어 학습이 안됨 -평균이 0이 아님 => zigzag로 수렴 |
-평균은 0이지만 sigmoid와 마찬가지로 값이 커질때 학습률 변화가 없음 | 0보다 클때 입력값 그대로 출력 |
+softmax : 멀티 분류 시 마지막 classification 출력층에 사용
=> classification 중 binary : sigmoid(0/1로 출력) & multi : softmax(각 label의 확률값합 1로 출력)로 사용됨
loss function
손실함수 : loss function
(비용함수 / 목적함수)
: 네트워크 모델이 얼마나 적절하게 학습이 되고있는지의 지표
-RSS(residual sum of square) => MSE(mean square error) //주로 회귀모델서 사용
-crossentropy //classification에서 사용 //분류에서 주로 사용
multi class => categorical crossentropy + softmax(실제 클래스 값에 해당하는 결과값에만 loss 부여 + 아주 잘못된 예측에는 매우 높은 loss 부여)
binary => binary crossentropy + sigmoid
Gradient Descent
경사하강법 : gradient descent
: 딥러닝의 뼈대
도출한 loss 함수 값이 줄어드는 방향으로 weight를 조절하여 학습 진행
=> how?
미분 사용 : 미분 => 값들의 방향성을 알 수 있음
각각의 가중치들을 편미분하여 학습률(learning rate)을 곱하여 가중치와 절편 조절
GD의 종류
Gradient Descent | Stocastic Gradient Descent | mini-batch Gradient Descent |
컴퓨팅 연산 과부화 | 한 건만 가지고 GD 적용 | mini-batch크기만큼 GD 적용 |
: 일반적으로 mini-batch가 대부분의 딥러닝 framework에서 채택됨
-우리가 학습하면서 주의해야하는 것
-learning rate 크기
-전역 최소점(global minimun) != 국소 최소점(local minimum)
Back propagation
오차 역전파: back propagation
퍼셉트론보다 복잡한 심층 신경망들이 적용되면서 단순 미분으로 계산하기 힘들어짐
-feed forward
-backpropagation 수행하여 출력층부터 역순으로 weight update
upstream gradient와 local gradient 적용하여 gradient 구할 수 있음
Optimizer
optimizer : 최적화 기법들
보다 최적으로 GD 적용 + 최소 loss로 보다 빠르고 안정적으로 수렴할 수 있는 기법 적용
//like 자동차의 기어를 바꾸고 엑셀 강도 조절을 통해 눈밭에 겉도는 자동차 바퀴 빼는 방법이랄까
-momentum //gradient 값 보정
: 관성
//이전 gradient 값들을 일정 수준 반영하며 신규 가중치로 update
지그재그로 수렴하는 것을 일정 수준 개선할 수 있음
-Adeptive Gradient : AdepGrad //learning rate 개선
가중치 별 다른 학습률을 동적으로 적용
iteration 시마다 개별 가중치 별 적요된 gradient 제곱값을 더해 새롭게 learning rate 적용
학습 반복하며 학습률이 너무 작아짐
-RMSProp : AdepGrad의 문제점 개선
gradient값을 제곱으로 더하지 않고 지수가중평균법을 적용하여 learning rate 조절
-Adam (Adeptive Moment Estimation)
학습률과 gradient descent 값 둘 다 조절
numpy는 cpu의 SIMD를 사용하여 빠른 연산이 가능했음
그런데 딥러닝으로 오니 SIMD도 부족하여 GPU 사용 시작
CNN
feature extractor + classifier과정
=> classifier에 맞는 최적의 feature를 추출하게됨
이때 최적의 feature 추출을 위해 최적의 weight값을 찾게됨
=> 최적의 feature 도출을 위해 적절한 필터들을 적용하므로 여기서는 최적의 필터 weight 값을 찾아내게됨