1) Layer (신경망 기본 블록)
- 선형 Layer, 즉 y=wx+b를 의미함 (= Dense, Fully Connected Layer)
- 각 Layer은 개별적 학습 parameter를 가짐, but 선형 Layer를 여러개 쌓는다고 성능이 좋아지는 것은 아니다. 이는 결국 1개의 선형 Layer로 표현될 수 있기 때문에 결국 1개의 Layer와 차이가 없어진다.
- 그래서 여러 비선형 활성 함수를 같이 사용해야 한다! (Sigmoid, Tanh, ReLU, Leaky ReLU)
▶ 비선형 활성 함수
Sigmoid: 실수를 취해 0~1 사이를 출력하도록 한다. input이 음수이면 0에, 양수이면 1에 가까운 값을 반환함. 단점으로는 0 or 1에 가까워 지면 기울기가 0이 되면서 가중치가 더 이상 조정되지 않으며 dead neuron이 됨.
Tanh: -1에서 1 사이의 값으로 반환, 이 함수도 기울기가 0이 되는 경우가 존재하지만 출력값이 0을 기준으로 만들어지므로 변화폭이 더 큼
ReLU: f(x) = max(0,x) 로, 음수는 0, 양수는 그대로 반환하게 한다. (단, Leaky ReLU는 음수를 0.001과 같은 매우 작은 수로 반환함). 최근에 가장 많이 사용되는 방법으로 SGD(Stochastic Gradient Descent)가 더 빨리 수렴하고 연산 비용이 적다라는 장점이 있지만, 이 또한 기울기가 크면 죽는 경우가 있어 learning rate를 조정해야 한다.
2) Neural Network 구축
- Pytorch의 nn.Module class를 상속하여 init, forward method를 구현
* init: 선형 Layer를 초기화
* forward: init 메소드에서 초기화한 Layer에 입력 데이터를 전달하고 최종 출력 반환 (여기서 ReLU 같은 비선형 함수 사용)
class LinearRegressionModel(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(5, 2)
self.linear = nn.Linear(2, 1)
def forward(self, x):
return self.linear(x)
model = LinearRegressionModel()
▶ Model 아키텍쳐
회기: 예측 문제로 1개의 숫자를 반환함 (마지막 Layer는 선형)
이진분류: Sigmoid 함수를 마지막 layer에 배치하여 이미지의 output을 A 또는 B 중에 선택하게 함
다중분류: 마지막 Layer에 softmax 함수를 사용하여 입력 데이터가 각 class로 분류될 확률을 구함 (전체 합=1)
3) 오차함수
- Gradient descent optimizer (scalar를 입력 받기 때문에 loss func도 scalar로 반환해야 함)
ML은 오차함수에서 나오는 값을 최소화하는 반복 과정으로, 2개의 오차함수가 있어도 1개의 Scalar 형태로 만들어야 함 (part 4 참고). 회기 문제는 nn.MSELoss(), 이진 및 다중 분류 문제는 cross-entropy Loss 등등을 사용하고 L1, NLL, NLL Loss 2d 등이 있다. (nuguziii.github.io/dev/dev-002/)
4) 최적화
- 오차를 줄이고, 알고리즘 정확도를 향상시키기 위해 가중치 최적화하는 과정으로 optim = optim.SGD(model.parm(), lr=0.01)로 사용하고, lr은 학습 param 변경 비율을 의미함. 그리고 계속 누적되기 때문에 반복문 안에서 zero_grad()를 호출하여 기울기 초기화 과정이 필요함
for input.target in dataset:
#초기화
optimizer.zero_grad()
#기울기 계산
output = model(input)
loss = loss_fn(output, target)
loss.backward()
#학습 param에 적용
optimizer.step()
'Programming > Deep Learning' 카테고리의 다른 글
7. Recurrent Neural Networks (RNN) & LSTM (0) | 2022.04.08 |
---|---|
6. Convolution Neural Network (CNN) (0) | 2021.02.04 |
5. 머신러닝 Workflow (0) | 2021.02.01 |
4. 머신러닝 입문 (0) | 2021.01.22 |
2. 신경망 구성 요소 (0) | 2021.01.13 |