밀린 React, Express, Pandas를 뒤로하고..
17주차 복습 시작!
인공지능(Artificial Inteligence)
머신러닝(Machine Learning)
딥러닝(Deep Learning)
딥러닝은 인공신경망에 기반하여 컴퓨터에게 사람의 사고방식을 가르치는 방법으로 보통 모델의 입력층(Input Layer)
과 출력층(Output Layer)
사이에 존재하는 히든 레이어(Hidden Layer)
가 3층 이상일 때 딥러닝 이라고 한다.
사람의 뉴런 과 같은 역할을 하는 모델로 초기 형태의 신경망
등장 배경: 명시적 프로그래밍의 한계(모든 조건을 고려할 수 없음)
=> 모델 스스로 데이터를 판단할 수 있는 기술이 필요
구조: 입력값과 각각의 가중치를 곱하여 더한 후 bias
를 더한 값을 활성함수(activation)에 넣음
activation function의 경우 step function
으로 일정 값을 넘으면 1, 그렇지 않으면 0 형태의 값을 가짐
AND
Gate, OR
Gate, NAND
Gate, NOR
Gate , ...XOR
Gate 와 같이 선형 분류로 해결할 수 없는 비선형적 문제 발생x1 | x2 | output |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
=> 단층 퍼셉트론을 여러층으로 쌓아 비선형적 문제 해결
=> XOR
의 경우 NAND
와 OR
을 결합하여 구현 가능
Hidden Layer
라고 함Hidden Layer
가 3층 이상이면 딥러닝Node/Unit
: 각 층을 구성하는 요소Weight
: 각 노드를 연결하는 강도(=가중치)Layer
: 모델을 구성하는 층Loss Function
을 최소화하기 위해 최적화 알고리즘 Optimizer
을 적용
예측값과 실제값간의 오차값
을 줄이기 위해 오차값을 최소화하는 인자를 찾는 알고리즘
을 적용
loss function
: 예측값과 실제값 간 오차값
ex> MAE, MSE, RMSE, Cross entropy
기본적인 최적화 알고리즘 : GD(Gradient Descent)
- 손실함수의 값을 최소화하기 위해 특정 가중치의 기울기(Gradient)를 이용하는 방법
- W(t+1) = W(t) - lr * dLoss(W)
각 가중치의 기울기 구하는 방법 : 역전파(Back Propagation)
- 역전파(Back Propagation)
: 목표 값과 모델이 예측한 output 값의 오차를 구하여 다시 뒤로 전파하면서 변수 값을 갱신하는 알고리즘
- 순전파(Forward Propagation)
: 입력값을 바탕으로 출력값을 계산하는 과정
- 학습 속도 문제
- 기울기 소실 문제
- 초기값 설정 문제
- 과적합 문제
원인
데이터 개수가 많아지면서 전체 데이터를 사용하여 손실함수를 계산할 때 계산량이 증가 => 속도가 낮아짐
해결 방법
전체 데이터가 아닌 부분 데이터를 활용하여 손실 함수를 계산
=> SGD(Stochastic Gradient Descent)
SGD(Stochastic Gradient Descent)
- 전체 데이터(batch)가 아닌 일부 데이터(mini-batch)에 대해 손실함수 계산
- 정확도는 떨어지지만 계산 속도가 빠름 => 많은 step 진행 가능
- 한계
1) mini-batch에 따른 Gradient 방향에 대한 문제 발생
2) Learning Rate가 너무 크거나 작은 경우 최적값 찾기가 어려움
다양한 최적화 알고리즘 등장
- SGD
의 Gradient 방향
해결 : Momentum
-> Adam
- SGD
의 Learning Rate
관련 문제 해결: AdaGrad
-> RMSProp
-> Adam
Adam
: Momentum
의 장점과 RMSProp
의 장점을 결합한 최적화 알고리즘
sigmoid
사용시 역전파할때 기울기가 0인 값을 전달하며 중간값 소실 -> 기울기 소실 문제가 반복되며 학습 제대로 안됨activation function
으로 sigmoid
대신ReLU
(내부 히든층) / tanh
(외부 출력층) 사용원인
초기값을 잘못 설정할 경우 성능 차이가 크게 발생
해결 방법
활성화 함수의 입력값이 너무 커지거나 작아지게 하면 안됨
- 1. 표준 정규분포 / 표준편차를 0.01로 하는 정규 분포로 초기화
- 2. Xavier
초기화 방법 + Sigmoid
Xavier
: 표준 정규분포를 입력개수의 제곱근으로 나누어줌
🚩 ReLU 함수에는 Xavier초기화가 적합하지 않음
레이어를 거칠수록 값이 0에 수렴
- 3. He
초기화 방법 + ReLU
He
: 표준 정규분포를 입력개수의 절반의 제곱근으로 나누어줌
Sigmoid, tanh 에는 Xavier, ReLU 에는 He가 효율적
출처:
/*elice*/
수업 자료