안녕하세요, HELLO
오늘은 DeepLearning.AI에서 진행하는 앤드류 응(Andrew Ng) 교수님의 딥러닝 전문화의 첫 번째 과정인 "Neural Networks and Deep Learning"을 정리하려고 합니다. "Neural Networks and Deep Learning"의 강의 목적은 '딥러닝의 기능, 과제 및 결과 이해'를 통해 '머신 러닝을 업무에 적용하고, 기술 수준을 높이고, AI 분야에서 단계를 밟을 수 있는 지식과 기술을 얻을 수 있는 경로'를 배우기 위함이며, 강의는 아래와 같이 구성되어 있습니다.
~ Introduction
~ Basics of Neural Network programming
~ One hidden layer Neural Networks
~ Deep Neural Networks
"Neural Networks and Deep Learning" (Andrew Ng)의 3주차 "One hidden layer Neural Networks"의 강의 내용입니다.
CHAPTER 1. 'Neural Network Introduction'
CHAPTER 2. 'Vectorization'
CHAPTER 3. 'Activation Function'
CHAPTER 1. 'Neural Network Introduction'
□ Neural Network Introduction (신경망 구성)
입력 특성들의 층(layer)을 입력층(Input layer)라고 하며 a[0]로 표기합니다. 이때 신경망을 읽는 법은 a 위 첨자 대괄호 0, 1, 2 ('a' superscript 'zero' square bracket) 등으로 읽습니다. 은닉층(Hidden layer)은 입력층과 출력층 사이에 있는 모든 층을 의미합니다. 출력 특성들의 층(layer)을 출력층(Output layer)라고 합니다. 신경망의 개수를 셀 때 입력층은 세지 않습니다. 입력층을 공식적인 신경망으로 치지 않기 때문입니다.
위 그림의 신경망(Neural network)은 1개 은닉층을 가지는 얕은 신경망(shallow neural network)으로 1개의 각 입력층, 은닉층, 출력층을 가지고 있습니다. 위 은닉층은 (4 x 3) 벡터로, '4행'은 첫 번째 좌표로 해당 층(은닉층)에 있는 노드를 의미하며, '3열'은 두 번째 좌표로 입력 특성(입력층)이 3개를 가지고 있다는 것을 의미합니다. 그리고 출력층은 (2 x 4) 벡터로, '2행'은 첫 번째 좌표로 해당 층에 있는 노드를 의미하며, '4열'은 두 번째 좌표로 입력 특성이 4개를 가지고 있다는 것을 의미합니다.
추가적으로 신경망 a[m]n에서 m은 은닉층, 출력층 등인 레이어(layer)를 의미하며, n은 해당 레이어의 구성 요소인 노드(node)를 의미합니다.
□ Computing Neural Network's Output (신경망 출력 계산)
입력값이 노드(node)를 통과할 때, 두 가지 과정을 거치게 됩니다.
입력 함수 z = wX + b (w=가중치, b=잔차), 활성화 함수 sigmoid인 층(layer)에서 (1) 입력값이 해당 층에서 함수 z가 실행되고, 그리고 (2) 활성화 함수 sigmoid 함수가 실행됩니다. 예측값 ŷ은 심층 신경망(multi hidden layer)인 경우에는 다음 층(layer)에서 새로운 입력값으로 적용되고, 옅은 신경망(One hidden layer)에서 결과로 출력됩니다.
벡터화를 함에 있어 중요한 부분은 표기법을 정확하게 입력하는 것입니다. 입력층은 신경망에서 [1]로 표기되지 않기에, 각 층에 순서를 헷갈리면 안 됩니다. 여기서 [1]은 은닉층(Hidden layer), [2]는 출력층(Output layer)이며, 입력층은 [0]로 표기합니다.
그리고 위 첨자 옆 (1), (2)는 1번째, 2번째 훈련 샘플을 의미합니다.
CHAPTER 2. 'Vectorization'
각 층에서 활성화 결과인 A의 행렬을 살펴보면, A[1] = { a[1](1), a[1](2), .., a[1](m) }은 해당 층(layer)에서의 훈련 샘플을 가로로 정렬(horizontally) 한 것임을 알 수 있습니다.
잔차 b가 0인 값이라는 것을 가정해서 구하게 되면, 가중치 w와 샘플 x를 곱해서 결괏값 z를 얻게 됩니다. 이를 벡터화해서 1줄로 간단히 정리할 수 있습니다. 추가적으로 잔차 b가 0이 아닌 경우에는 파이썬 broadcasting과 동일하게 열(column) 벡터 항목이 더해집니다.
정리하면, 선형대수에 따라 줄 별로 정리할 수 있으며, 신경망의 다른 층들이 다른 층에 연결되어 있음을 확인할 수 있습니다. z[1] = w[1]A[0] + b[1] 이때, A[0]는 입력 특성 벡터 x로서 입력층을 의미합니다. 위 내용은 은닉층이 1개인 옅은 신경망(one hidden layer)을 정리한 것이며, 심층 신경망(multi hidden layer)도 2층 신경망과 동일한 기능과 동일한 형태를 여러 번 반복하는 것을 의미합니다.
CHAPTER 3. 'Activation Function'
□ Sigmoid Function
시그모이드 함수(sigmoid function)는 0에서 1 사이의 값을 가집니다. 은닉층(hidden layer)에서 별로 사용하지 않지만, 이항 분류(binary classification)에서는 시그모이드 함수를 사용하기도 합니다. 예를 들어 기준값을 0.5로 설정하면, 결괏값이 0.5 이상인 경우 분류에 해당하고, 반대로 0.5 미만인 경우 분류에 해당하지 않는 것으로 계산할 수 있습니다. tanh 함수는 -1에서 1 사이의 값을 가지기에, 0에서 1 사이의 값을 가지는 sigmoid 함수가 이항 분류 계산에 있어 효율적으로 처리할 수 있습니다. 그리고 큰 양수, 음수 값을 가질 때는 기울기가 0에 가까워져 경사 하강법(gradient descent)이 매우 느려집니다.
□ Tanh Function
tanh 함수는 -1에서 1 사이의 값을 가집니다. 평균값(mean)이 0이기 때문에, 데이터를 원점으로 이동하는 효과가 있습니다. 평균이 0.5인 sigmoid 함수보다 더 효율적입니다. 그리고 sigmoid 함수와 동일하게 큰 양수, 음수 값을 가질 때는 기울기가 0에 가까워져 경사 하강법(gradient descent)이 매우 느려지는 한계점이 있습니다.
□ Relu Function
ReLU(Rectified Linear Unit) 함수는 입력값이 0보다 작으면 0으로 출력, 0보다 크면 입력값 그대로 출력하는 함수입니다. a = max(0, z)로 음수일 때 기울기는 0이지만, 양수일 때는 자기 자신 값을 가지기에 기울기는 1을 가집니다. 다른 함수에 비해 0보다 큰 활성화 함수의 미분 값이 많아서 빠르게 학습할 수 있습니다. 다만, 음수 값인 경우에는 미분 값이 0이기에, 이를 대비하여 음수에 약간의 기울기를 가지는 leaky Relu 함수가 있습니다.
□ Non-linear Activation Function(비선형 활성화 함수)
선형 함수는 y=x, y=ax, y=ax+b와 같은 함수를 의미합니다. 은닉층에서 선형 활성화 함수 (g(x) = x)를 사용하는 경우에는, 2개의 은닉층을 적용해도 g(g(x)) = x로 동일한 값을 계속해서 출력하며, 훈련의 유의미한 결과를 가져오지 않습니다. 이로 인해 은닉층에서는 ReLU, sigmoid, Tanh 등의 활성화 함수를 활용합니다.
□ Derivatives of activation function(활성화 함수의 도함수)
■ 마무리
"Neural Networks and Deep Learning" (Andrew Ng)의 "One hidden layer Neural Networks"에 대해서 정리해봤습니다.
그럼 오늘 하루도 즐거운 나날 되길 기도하겠습니다
좋아요와 댓글 부탁드립니다 :)
감사합니다.
'COURSERA' 카테고리의 다른 글
week 3_Planar data classification with a hidden layer 실습 (Andrew Ng) (0) | 2022.02.10 |
---|---|
week 3_얕은 신경망(Shallow, One hidden layer Neural Networks) 연습문제 (Andrew Ng) (0) | 2022.02.10 |
week 2_Python Basics with Numpy (Andrew Ng) (0) | 2022.02.07 |
week 2_신경망 기초 연습문제 (Andrew Ng) (0) | 2022.02.07 |
week 2_벡터화(Vectorization) (Andrew Ng) (0) | 2022.02.07 |
댓글