공부/AIFFEL

FUNDAMENTAL 18. 딥러닝 들여다보기

dong_dong_2 2021. 2. 8. 20:03

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로 비슷하게 구현하도록 짜보면서 조금은 작동원리를 안 것 같은 기분이 든다.