1. 신경망 구성 (1) 개요
- 신경망 : 우리 뇌의 수 많은 뉴런들이 서로 복잡하게 얽혀 있고, 이것을 전체적으로 보면 거대한 그물망같은 형태를 이루는데, 이를 신경망이라 부른다.
- 인공신경망 : 우리 뇌 속의 신경망 구조를 착안해서 퍼셉트론(Perceptron)이라는 형태를 제안하며 이를 연결한 형태를 말한다.
- 다층 퍼셉트론(Multi-Layer Perceptron, MLP) : 인공신경망 중에서도 2개 이상의 레이어를 쌓아서 만든 것을 보통 의미한다.
- 인공 신경망은 크게 입력층, 은닉층, 출력층으로 구성되어있고, 은닉층이 많아지면 인공신경망이 DEEP해졌다고 이야기 한다. -> 충분히 깊어지면 DNN
- Fully-Connected Neural Network와 MLP는 다른 용어이다.
1) FN : 서로 다른 층에서 위치한 노드 간에는 연결 관계가 존재하지 않으며, 인접한 층에 위치한 노드들 간의 연결만 존재한다는 의미를 내포함.
- Parameters / Weights
1) 입력층-은닉층, 은닉층-출력층 사이에는 각각 행렬이 존재한다.
2) 이 행렬들을 Parameter 혹은 Weight라고 부른다.
3) 두 단어는 보통 같은 뜻으로 사용되지만, 실제로 Parameter에는 bias 노드도 포함된다는 점만 유의하면 된다.
2. 신경망 구성 (2) 활성화 함수와 손실 함수
- 활성화 함수(Activation Functions)
1) 딥러닝에서는 활성화 함수의 존재가 필수적이다.
2) 보통 비선형 함수를 사용하는데 이 비선형 함수를 MLP안에 포함시키면서 모델의 표현력이 좋아지게 된다.
3) 정확히는 레이어 사이에 이 비선형 함수가 포함되지 않은 MLP는 한개의 레이어로 이루어진 모델과 수학적으로 다른 점이 없다.
4) 종류
(1) Sigmoid : 0이 중심점이 아니다, gradient vanishing 현상이 발생한다, exp함수 비용이 크다
(2) Tanh : 0을 중심으로 만듬, gradient vanishing 현상이 있음
(3) ReLU : 위 2개 함수보다 비교적 학습이 빠름, 연산비용이 크지 않고, 구현이 간단함.
- 손실함수(Loss Functions)
1) 비선형 활성화 함수를 가진 여러 개의 은닉층을 거친 다음 정보가 출력층으로 전달된다.
2) 이 때 우리가 원하는 정답과 전달된 신호 정보들 사이의 차이를 계산하고, 차이를 줄이기 위해 각 파라미터들을 조정하는 것이 딥러닝의 전체적인 학습 흐름이다.
3) 이 차이를 구하는 데 사용되는 함수를 손실함수(Loss Function) 또는 비용함수(Cost Function)라고 부른다.
4) 종류 : 평균제곱오차(MSE, Mean Square Error), 교차 엔트로피(Cross Entropy)
3. 경사하강법
- 마치 산에서 내리막길을 따라 내려가는 것처럼 각 단계에서의 기울기를 구해서 해당 기울기가 가리키는 방향으로 이동하는 방법을 말함.
- 각 시점의 기울기가 가리키는 방향으로 이동할 때 너무 크게 내려가면 오히려 내려가지 못하고 다른 산으로 올라갈 수 있음.
- 그래서 우리는 학습률(learning rate)이라는 개념을 도입해 기울기 값과 확습률을 곱한 만큼만 다음 발걸음을 내딛음.
- 그리고 산의 어디서 출발했는지에 따라 내려가는 시간이 달라질 수도 있음. 이는 parameter의 값들을 어떻게 초기화하는지의 문제와 연결할 수 있다.
4. 오차역전파법이란?
- 지금까지 손실함수를 통해 구해진 오차를 가지고 각 파라미터들을 조정하는 경사하강법을 배웠다.
- 이 기울기를 어떻게 입력층까지 전달하며 파라미터들을 조정할 수 있을까? -> 이 과정에서 쓰이는 개념이 오차역전파법(Backpropagation)이다.
- 오차역전파법은 MLP를 학습시키기 위한 일반적인 알고리즘 중 하나이다.
- 출력층의 결과와 target 값과의 차이를 구한 뒤, 오차값을 각 레이어들을 지마녀 역전파해가며 각 노드가 가지고 있는 변수들을 갱신해 나가는 방식이다.
5. 모델 학습 Step-by-Step
- 해당 노드는 코드중심으로 학습함.
6. 추론 과정 구현과 정확도(Accuracy) 계산
- 해당 노드는 코드중심으로 학습함.
7. 전체 학습 사이클 수행
- 전체적으로 이번 노드는 개념설명 + tensorflow를 사용하지 않고 numpy를 이용하여 신경망을 학습하였다. 따라서 이미 아는 내용을 반복하거나 글로 정리하기 어려운 부분들이 있다.
- tensorflow를 이용하여 간단히 사용했던 함수(하지만 어찌 작동하는지는 잘 몰랐던)를 numpy로 비슷하게 구현하도록 짜보면서 조금은 작동원리를 안 것 같은 기분이 든다.
'공부 > AIFFEL' 카테고리의 다른 글
제 1차 해커톤 (대전) : 캐글 축제 (0) | 2021.02.10 |
---|---|
풀잎스쿨 - DeepML(CS231N) Lec. 06 ~ Lec. 07 (0) | 2021.02.08 |
FUNDAMENTAL 17. 어라, 이 시계열 데이터 이상한데? - Anomaly Detection (0) | 2021.02.05 |
Exploration 9 : 나의 첫 번째 캐글 경진대회, 무작정 따라해보기 (0) | 2021.02.05 |
FUNDAMENTAL 16. 컴퓨터 파워 UP (0) | 2021.02.03 |