이 자료는 인공지능 교육 비영리단체 OUTTA 에서 출판한 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》 를 바탕으로 제작되었습니다.
Remnote 자료와 Lecture PPT는 링크를 통해 확인하실 수 있습니다.
Made by Hyunsoo Lee (SNU Dept. of Electrical and Computer Engineering, Leader of Mentor Team for 2022 Spring Semester)
신경망 (Neural Networks, NN) : 입력(input) 데이터와 출력(output) 데이터 사이의 관계를 하나의 함수 관계로 연결해 표현해주는 인공지능 모델
신경망을 이용하면, 특정 조건을 만족하는 함수들에 대해 충분한 근사치를 얻을 수 있음이 증명되었음 : Universal Approximation Thm.
Universal Approximation Theorem
를 아래 표와 같이 정의하자.
Notation | Meaning |
---|---|
Nonconstant, continuous, bounded, and monotonically increasing non-linear function | |
의 닫힌 유계 부분집합 | |
에서 로 가는 연속함수의 집합 | |
에 속하면서 와 독립인 임의의 함수 |
위 표의 조건을 만족하는 에 대해,
와 같이 함수 를 정의하면, 역시 위 표의 조건을 만족하면서 정의된 임의의 함수 에 대해,
즉, Universal Approximation Theorem 은 Proper 한 비선형 함수 를 이용해, 가 에 속하면서 와 독립인 임의의 함수 에 매우 가까워지게 하는 파라미터 를 항상 찾을 수 있음을 의미한다.
다시 말하자면, 값에 대해 적절한 선형 및 비선형 연산을 적용한다면, 의 값으로 근사시킬 수 있다. '선형 및 비선형 연산' 은 파라미터와 비선형 함수로 표현할 수 있고, 이 파라미터을 신경망 모델로 표현하고 적절한 값을 찾아내는 것이 모델 학습(Training)의 과정이다.
Universal Approximation Theorem 에 대한 자세한 내용은 <인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기> 본문을 참고해 주시기 바랍니다.
일 때 일변수함수 의 모식도를 방향 그래프 (Directed Graph)로 나타내기
방향 그래프 구성 요소 : 1) 노드, 2) 간선 (노드를 이어주는 선) - 간선은 방향을 가짐
그래프의 가중치와 편향은?
가중치 : (입력값에 곱해주는 값)
편향 : (함수 에서 더해주는 값)
참고) 무방향 그래프 : 간선의 양방향으로 모두 이동할 수 있는 그래프
편향을 가중치로 취급하는 방법?
모델의 입력값을 와 '1' 두 개로 생각
일 때 이변수함수 의 모식도를 방향 그래프 (Directed Graph)로 나타내기
편향을 가중치처럼 본다면?
노드와 간선으로 이루어진, 방향이 정해져 있는 그래프
신경망 전체에 걸쳐 한 방향으로만 데이터가 전달됨
신경망과 뉴런의 유사성
노드 뉴런 (수상돌기)
간선 축삭돌기
계층 (Layer) : 같은 선상에 있는 노드들
입력층(Input Layer) : 신경망에 데이터가 처음 입력되는 부분
출력층(Output Layer) : 신경망을 통과한 결과가 출력되는 부분
은닉층(Hidden Layer) : 입력층으로부터 입력받은 데이터에 대해 처리를 진행해, 처리 결과를 출력층으로 전달하는 부분
심층 신경망 (Deep Neural Network, DNN) : 은닉층의 개수가 2개 이상인 신경망
뉴런(노드)이 가지고 있는 동일한 규칙
1) 각 뉴런에 입력되는 값은 여러 개 가능, 그러나 출력되는 값은 오직 하나
2) 각 뉴런에 입력되는 값에는 가중치가 곱해짐
3) 출력되는 값은 활성화 함수를 통과함
용어 정의
밀집층 (Dense Layer) : 모든 입력 데이터에 대해 가중치를 곱하여 더해주는 Layer
완전연결 계층 (Fully-connected Layer) : 각 층의 노드들끼리 완전하게 연결된 신경망의 Layer
입력 데이터 , 각각에 대응되는 가중치 일 때 가중치 곱은?
데이터가 2차원 이상일 경우?
벡터화 (Vectorization, flatten) : 차원 1차원으로 차원을 변환하는 과정
벡터화 과정의 문제점
여러 행의 데이터를 하나의 행으로 이어서 합쳐주기 때문에, 데이터가 가진 공간적인 정보가 무시됨
따라서, 단순히 밀집층에서 가중치를 곱하는 방법 외에도 다른 가중치 곱이 존재 (ex. CNN (Convolutional Neural Network))
뉴런 (또는 Node)에서 최종적인 값을 내보내기 전에 통과 시켜주는 함수
주로 비선형 함수를 지칭
선형 함수의 예시로는 항등함수가 존재
Universal Approximation 에서 활성화 함수 : 에 대응됨
a. 활성화 함수의 종류
4.2.4.a. 절에 사용된 그림의 출처는 유원준 안상준 님의 저서인 Pytorch 로 시작하는 딥 러닝 입문임을 밝힙니다.
1. 항등함수
주로 출력층에서 사용됨, 별도의 계산과정이 없음
ML 실습 4 역시 활성화 함수로 항등함수를 활용하였음!
회귀 문제에서 많이 사용됨
비록 활성화 함수의 첫 번째 예시로 항등함수를 소개하였지만, 일반적으로 활성화 함수는 비선형 함수 여야 한다. 선형 함수를 활성화 함수로 사용할 경우, 은닉층의 가중치 값이 바뀐 것과 같은 효과를 가져오기 때문이다. 즉, 비선형성을 부여하지 못하고 결과적으로 활성화 함수를 추가하는 의미가 사라지게 된다. 이제부터는 비선형 함수들에 대해 살펴보도록 하자.
2. Sigmoid 함수
분류 문제에 많이 사용됨. 이유는?
딥러닝에서는 잘 활용되지 않음 : Gradient Vanishing 문제를 가짐
Gradient Vanishing
가 0 근방의 값이 아닌, 매우 큰 값이나 매우 작은 값을 가지는 경우 sigmoid 함수의 기울기가 0에 수렴하게 됨.
이 때 오차 역전파 과정에서 미분이 일어나고, 활성화 함수의 기울기(미분계수)가 곱해지므로 0에 가까운 값들이 계속해서 곱해지게 됨.
결과적으로 맨 처음 층까지 Loss function의 기울기 값이 전달되지 않고, 가중치 업데이트가 일어나지 않음 (또는 느리게 일어남).
3. tanh 함수
Sigmoid 함수의 중앙값이 0이 아닌 문제를 해결
그러나, 여전히 Gradient Vanishing 문제를 겪음
중앙값이 0이므로, Sigmoid 함수에 비해서는 Gradient Vanishing 이 적은 빈도로 발생
결과적으로 Sigmoid 보다는 더 많이 사용됨
4. ReLU 함수
현대 딥러닝 모델에서 가장 많이 사용되는 대표적인 활성화 함수
Sigmoid 함수의 기울기 소실 해결 가능
그러나 입력값이 음수일 경우 기울기가 0 ⇒ 여전히 문제 발생 : "Dying ReLU"
5. Leaky ReLU 함수
기울기가 0이 되지 않으므로, Dyning ReLU 문제점을 해결 가능
그러나 새로운 Hyperparameter (음의 기울기 ) 를 지정해 주어야 한다는 문제점을 가짐.
6. Softmax 함수
, ⇒ 분류 문제에서 각 class 에 속할 확률로 해석 가능
다중 클래스 분류 문제 해결에 많이 사용됨
b. 활성화 함수의 필요성
활성화 함수를 곱해주지 않는다면, 선형 모델밖에 표현하지 못함.
가중치를 곱해주는 과정은 입력 데이터에 대한 선형결합 (Linear Combination) 이므로.
따라서 비선형 함수인 활성화 함수를 곱해, 보편적인 수학 모델을 표현할 수 있으며 입출력 데이터 간의 규칙성을 모델링 가능.
활성화 함수가 없다면, 신경망의 층 수를 증가시키는 것이 의미가 없어짐.
선형 결합을 여러 층에 걸쳐 반복해도, 결국 선형결합이므로 같은 결과를 내는 하나의 층으로 나타낼 수 있기 때문.
활성화함수가 존재하면 신경망의 층수를 증가시키는 것이 의미 있어지며, 신경망의 층 수에 따라 비선형성이 추가됨.
신경망 학습 과정은 크게 4단계로 구성된다.
1) 데이터 전처리
2) 신경망 모델 구축
3) 손실함수 정의
4) 손실함수 최적화 (역전파)
여러 가지 데이터 전처리 기법 중 특성 스케일링(Feature Scaling) 또는 정규화(Normalization)에 대해서 알아보자. ML 실습 4 에서 이를 직접 구현해 볼 것이다. 아래와 같은 예시를 살펴보자.
키와 몸무게의 스케일(규모, scale)이 다름 (키 값이 몸무게 값의 약 2-3배)
발생할 수 있는 문제점?
머신러닝 모델은 단위를 제외한 값만을 가지고 문제를 해결
따라서 키 값의 중요도가 증가하게 됨
경사하강법에서, 특정 변수 (Scale 이 작은 변수, 여기서는 몸무게)에 대한 가중치의 업데이트가 잘 일어나지 않음
ML 실습 4 참고 (직접 확인)
순전파 과정에서, 가 배가 되면 는 배가 됨 기울기 값 감소, 가중치 수렴 속도 감소
해결 방안 : 모든 특성 (feature)들의 scale 을 통일 시켜주기
최대-최소 정규화
Z-점수 정규화
(1) 최소 - 최대 정규화
단점 : Outlier가 있는 경우, 나머지 데이터들의 값이 0 또는 1에 가까워짐
ex)
(2) Z-점수 정규화
층 수
층의 종류
활성화함수 등을 정의
여러 손실함수 (Loss Function)의 종류에 대해 알아보자.
SSE (Sum of Squares of Error)
Q) 모델의 출력값이 [0.2, 0.5, 0.3]이고, 실제 값이 [0, 1, 0]일 때 SSE는? 0.38
MSE (Mean Squared Error)
CEE (Cross-Entropy Error)
Training Data 이용
Optimizer 활용 (SGD, Adam, RMSProp 등)
오차역전파법 (Error Backpropagation) : 가중치 업데이트
순전파 : 입력값에 가중치를 곱하고, 활성화 함수를 통과시키는 과정
역전파 : 손실함수의 편미분 계수들을 이용해 가중치를 업데이트 하는 과정
수치 미분 없이, 편미분 계수를 효율적으로 구할 수 있음
자동미분 라이브러리 이용 (ML 실습 3 참고)
Chain Rule 기반
Recap : GD at th iteration
즉, 특정 가중치를 Update 하기 위해서는 해당 가중치에 대한 편미분계수를 구해야 한다.
Backpropagation Example 1
위 그림에서, 가중치 와 에 대해 역전파가 어떻게 일어나는지 알아보자. 구해야 하는 값은
이다. 수식을 통해 하나씩 전개해 보자. 출력층에 가까운 Layer 로부터 손실함수에 대한 편미분 계수를 구해 간다. 출력층에 가까운 Node 에서 구한 편미분계수가, 다음 층의 편미분계수를 구할 때 이용된다.
[1]
이 때, 이므로
따라서,
[2]
이 때, 이므로
따라서,
[1], [2] 에서 최종적인 값을 구하기 위해서는
의 값을 구해야 한다. 역시 Chain Rule 을 이용해 구하면 아래와 같다.
[3]
이와 같이 가중치 와 에 대한 편미분계수를 구해 보았다. 이제는, 조금 더 복잡하게 가중치 에 대한 편미분계수를 구해 보자.
[4]
우선, Chain Rule 에 의해
가 성립한다. 이 때
임을 이용하자. 이제
를 구해보자. Chain Rule 에 의해
이 성립한다. 즉,
의 값을 구해야 한다.
[6]
By chain rule,
In the same way,
Therefore,
이 때
의 값은 [3] 과정에서 구하였으므로, 해당 값을 이용해 최종적인 편미분계수를 구할 수 있다.
Backpropagation Example 2 : pp. 65 - 80
Remark 1 : 위 과정을 'Local Gradient' 와 'Downstream Gradient' 를 이용해 더 간결하게 일반화 할 수 있다. 관심이 있다면 구글링을 통해 조사해 보자.
Remark 2 : Use Matrices
순전파 결과를 행렬을 이용해 표현하면
where
이 때, 행렬곱을 이용해 밀집층의 역전파를 계산하면 아래와 같다.
1 Iteration 의 정의
순전파 + 역전파
손실함수에 대한 역전파, Optimizer 통해 가중치 업데이트
batch 의 정의 : 신경망에 한 번에 입력해주는 데이터 묶음
batch size : 1개의 batch에 들어 있는 데이터의 개수
batch 구성 방식 : 전체 데이터에서 개 랜덤 추출
1 epoch 의 정의
전체 데이터가 개, batch size가 일 때 번의 iteration을 통해 가중치 업데이트가 1회 일어나는 과정
1 epoch = iterations
Remark : batch 를 사용할 때의 이점
최적의 가중치를 향해 연속적이고 부드럽게 이동할 수 있음
손실함수의 그래디언트는 데이터 별로 상당히 큰 차이가 있을 수 있다. 따라서 개별 데이터에 대해 가중치 업데이트를 각각 진행할 경우에는 가중치가 역동적으로 움직이는 문제가 발생할 수 있다. 그러나 batch size가 M인 batch의 평균적인 손실 함수에 대해 생각 하는 경우, 가중치 업데이트의 역동성이 완화되어 좀 더 안정적이게 된다.
메모리의 효율적 사용, 학습 속도 향상
데이터 전체를 한 번에 신경망에 입력해주는 경우, 데이터셋을 이루는 모든 데이터에 대한 오차를 메모리에 전부 저장해야 한다. 이로 인해 메모리 공간을 많이 사용하여 학습 속도가 저하된다. 그러나 batch로 분할하여 학습하면 메모리 공간 절약에 의해 학습 속도가 향상된다.
딥러닝 모델의 성능에 영향을 주는 변수
사용자가 직접 설정, 입력
Weight initialization
Learning rate
Early Stopping
Depth of Layer
Numbers of nodes in one Layer
Activation Function
Loss Function
Optimizer
batch size
patch size
Dropout ratio
etc...
별도의 출처가 표기되지 않은 Figure의 경우 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》에서 가져왔거나 원본을 기반으로 재구성 된 Figure 입니다.