[단단한 머신러닝] 5장 신경망
5장 신경망
5.1 뉴런 모델
💡 신경망이란?
"적응성이 있는 단순 단위로 구성된 광범위하고 서로 연결된 네트워크다. 이 조직은 현실 세계 사물에 대한 생물 신경계통의 상호작용을 모방할 수 있다.[Kohonen, 1988]"
💡 신경망이란?
"적응성이 있는 단순 단위로 구성된 광범위하고 서로 연결된 네트워크다. 이 조직은 현실 세계 사물에 대한 생물 신경계통의 상호작용을 모방할 수 있다.[Kohonen, 1988]"
신경망에서 가장 기초가 되는 성분은 뉴런(Neuron) 모델입니다. 위 정의에서 언급한 '단순 단위'가 뉴런이며 생물 신경망에서 각 뉴런은 기타 뉴런과 서로 연결되어 있습니다. 만약 뉴런이 흥분한다면 연결된 뉴런으로 화학 물질을 전송하며 이렇게 뉴런 내의 전압을 바꾸게 됩니다. 만약 어떤 뉴런의 전압이 임계값(Threshold)를 넘으면 해당 뉴런이 활성화됩니다.
뉴런의 입력 신호는 가중치를 가진 연결을 거쳐 전달됩니다. 뉴런이 받은 총 입력값은 뉴런의 임계값과 비교하고, 활성화함수를 통해 뉴런의 출력을 처리합니다.
🦠 생물학적 뉴런 -> 인공적으로 모델화
1. 뉴런을 여러 계층(Layer)에 걸쳐 위치시킵니다.
- 각각의 인공 뉴런은 노드라고 부른다.
- 계층이 많아질수록 신경망은 깊어지게 됩니다.
- 각 노드는 직전 계층과 직후 계츠에 존재하는 다른 모든 노드와 연결되어 있습니다.
2. 각각의 연결에 적용할 가중치(Weight)를 함께 표기합니다.
3. 노드 내에서 입력 값에 가중치를 곱하고 편향(Bias)을 더한 후 활성화함수를 거쳐 결과 값을 만드는 것
4. 이후, 가중치와 편향의 값을 변경해가면서 적절한 값을 찾아내는 최적화 과정을 학습 또는 훈련이라 합니다.
활성화 함수(Activation Function)
앞서 말했듯이 뉴런은 상호 연결되어 있습니다. 이들은 전기 입력을 받아 또 다른 전기 신호를 발생시킵니다. 그러나 입력을 받았을 때 즉시 반응하는 것이 아니라 입력 값이 임계값(Threshold)에 도달해야 출력을 발생합니다.
아래와 같은 수식으로 나타낼 수 있습니다.
수식에서 함수는 뉴런에서 활성화 함수(Activation Function)이라고 부릅니다. 활성화 함수는 입력 신호를 받아 임계값을 넘어서는 경우에 출력 신호를 생성해주는 함수입니다. 활성화 함수에 종류는 다양하나 그 중 가장 일반적인 활성화 함수로는 계단 함수, 시그모이드 함수, 부호 함수가 있습니다.
- 계단(Step), 부호(Sign) 함수는 Hard Limit Function이라고 하며, 분류와 패턴인식 작업에서 결정을 내리는 뉴런에 주로 쓰입니다.
- 시그모이드(Sigmoid) 함수는 양과 음의 무한대 사이에 있는 입력값을 0과 1 사이에 있는 실수 값으로 바꿉니다. 주로 역전파 신경망에 쓰입니다.
- 선형(Linear) 함수는 뉴런의 입력에 가중치가 적용된 것과 같은 값을 출력으로 내놓습니다. 선형 근사에 주로 쓰입니다.
5.2 퍼셉트론과 다층 네트워크
퍼셉트론(Perceptron)은 다수의 신호를 입력으로 받아 하나의 신호를 출력합니다. 쉽게 말하면 입출력을 갖춘 알고리즘이며 입력을 주면 정해진 규칙에 따른 값을 출력하는 것입니다.
일반적으로 훈련 데이터 세트를 정한 상태에서 가중치 와 임계값 는 학습을 통해 얻습니다. 입계값 는 하나의 입력이 -0.1로 고정된 더미 노드가 대응하는 연결 가중치 이라고도 볼 수 있습니다. 이렇게 하면 가중치와 임계값의 학습은 하나의 가중치 학습으로 통일할 수 있습니다.
퍼셉트론의 학습 규칙은 매우 간단합니다. 훈련 샘플 에 대해 만약 퍼셉트론의 출력이 라면 퍼셉트론의 가중치는 다음과 같이 조정합니다.
여기서 는 학습률입니다. 위의 식에서 알 수 있는 것은 만약 퍼셉트론이 훈련 샘플에 대해 정확히 예측했다면, 즉 라면 퍼셉트론에는 아무런 변화가 일어나지 않습니다. 그러나 그렇지 않은 경우 틀린 정도에 따라 가중치를 조절합니다.
💡 학습률(Learning Rate)이란?
임의의 수로 시작하여 '오차'를 통해 기울기를 변화시키는 과정입니다. 그러나 오차만을 기준으로 업데이트한다면 최종적으로는 그저 마지막 학습 데이터에 맞춰진 업데이트 결과만을 얻게 될 것입니다. 이를 해결하기 위해 업데이트의 정도를 조금씩 조정할 수 있게 해주는 '학습률(Learning Rate)'의 개념이 나오게 됩니다. 바로 새로운 가중치로 점프하는 것이 아니라 일부씩만 업데이트 하는 것입니다. 즉 기존 여러번의 학습에 기초해 업데이트된 값을 유지하면서, 학습 데이터가 제시하는 방향으로 조금씩만 움직이는 것입니다.
5.3 오차 역전파(Back Propagation) 알고리즘
역전파 알고리즘은 Input과 Output을 알고 있는 상태에서 신경망을 학습시키는 방법입니다. 역전파 알고리즘을 적용하기 이전에 MLP에 대해 다음과 같이 정의합니다.
- 초기 가중치 값은 랜덤으로 주어짐
- 각각의 노드는 하나의 퍼셉트론으로 생각함. 즉 노드를 지나칠 때마다 활성 함수를 적용하며, 활성화 함수를 적용하기 이전을 net, 이후를 out이라 함.
- 다음 레이어의 계산에는 out값을 사용하며, 마지막 out이 output이 됨.
- 활성화 함수로 시그모이드 함수를 사용함.
우리가 결과값으로 얻기를 바라는 값을 Target, 실제로 얻은 결과값을 Output이라하면 오차 는 다음과 같습니다.
(로 나누는 이유는 계산의 편의를 위해서임)
여기서 합의 의미는 모든 Output에서 발생한 오차를 모두 더해주는 것입니다. 최종 목적은 이 오차에 관한 함수 의 함수값을 0에 근사시키는 것이기에 오차가 0에 가까워진다면 신경망은 학습에 사용된 Input들과 그에 유사한 Input에 대해서 우리가 원하는 정답 Output 값을 산출할 것입니다.
각각 가중치가 2개일때 (), 오차 를 도식화하면 위와 같은데, 일 때 가 최소화됩니다.
따라서 오차 를 모든 가중치들에 대한 방정식으로 본다면, 우리가 해야할 것은 가중치 를 수정해 가 최소가 되도록 만드는 것이며, 이를 위해 경사하강법(Graident Descent)라는 최적화 알고리즘을 사용합니다. 그 기본 원리는 기울기가 낮은 쪽으로 연속적으로 이속시켜 값이 최소가 되는 점인 극값에 다다르게 하는 것이라고 볼 수 있습니다.
이를 위해 오차 를 미분하는 과정이 필요한데, 모든 가중치가 오차에 영향을 미치고 있으므로 를 각각의 가중치로 편미분해야 합니다. 다층 신경망은 각 계층이 연결되어 있어 Output에 가까운 미분 과정에서 사용되는 값이 Output에서 먼쪽의 미분과정에 사용됩니다. 따라서 Output과 가까운 쪽의 미분을 먼저 진행하게 되며 그렇기 때문에 Back Propagation이라고 불립니다.
알고리즘
알고리즘 자체는 굉장히 단순합니다. 크게 4단계로 이루어져 있는데 사실상 1 Epoch는 3번까지의 단계입니다. 한번의 Epoch으로는 오차가 많이 줄어들지 않으나 여러번 반복해서 실행하면 오차가 0에 가까워집니다.
🔎 알고리즘
1. 기존에 설정되어 있는 가중치를 사용해 net, out을 계산.(forward pass)
2. 전체 오차를 각 가중치로 편미분한 값을 기존의 가중치에서 빼줌.(오차를 줄이는 과정)
3. 모든 가중치에 대해 2를 실행함.(Output에 가까운 쪽에서부터 먼쪽으로)
4. 1-3을 학습 횟수(Epoch 수)만큼 반복
🔎 자세히 알아보면 아래와 같습니다.
1. 단순히 Input에 가주치를 곱한 값들을 더하고 활성화함수를 이용해 out을 만드는 과정을 반복합니다.
2-1. 를 기준으로 잡아보면, 전체 오차 를 로 편미분한 값을 기존의 에서 빼주면 1회 갱신이 완료된 것입니다.
오차 를 로 편미분하면 chain rule을 적용해 다음과 같이 풀어낼 수 있고 각각을 계산하는 방법은 다음과 같습니다.
최종 Output인 은 다른 오차에 영향을 미치지 않으므로, 오차 을 미분한 값이 (1)과 같아집니다.
out과 net의 관계는 활성화 함수이므로 이 경우에 시그모이드 함수를 미분한 것과 같은 값이 됩니다. 이때 라는 시그모이드 함수의 수학적인 특징을 사용합니다.
net은 각각의 가중치와 이전 노드의 곱의 합으로 이루어져있으므로, (3)은 이전 노드의 out값이 됩니다.
특히, (1)과 (2)를 곱한 값은 노드 의 delta값이라 하고 이후 과정에서 사용하므로, 알고리즘의 속도 향상을 위해 실제 코드에서는 이를 저장해 놓는 과정이 필요합니다.
따라서 최종적으로 는 다음과 같이 갱신됩니다.
이는 Hidden Layer와 Output Layer 사이에 존재하는 가중치 값들()에 대해 모두 성립합니다. 따라서
2-2. 다음으로 을 기준으로 잡으면, 다음과 같은 형태로 가중치를 갱신할 수 있습니다.
다만, 은 Output에서 머리 떨어져있기 때문에 편미분의 결과값이 조금 다릅니다. 과 마찬가지로 풀어서 쓰면,
output1과 output2의 오차 모두에 영향을 주므로 각각의 오차를 편미분한 값의 합으로 나타낼 수 있으며, 이는 각 노드의 델타값과 그에 대응하는 가중치값의 곱들의 합으로 나타낼 수 있습니다.
의 (2)와 동일하게 시그모이드 함수의 미분,
마찬가지로 이전의 (3)과 동일한 원리를 적용하면
최종적으로 은 아래와 같이 갱신됩니다.
다른 가중치 역시 마찬가지입니다.
이렇게 레이어 3개 사이에 생긴 가중치를 갱신하면서 아래와 같이 일반화된 공식을 구할 수 있습니다.
Pseudo Code로 나타내면 아래와 같습니다.
for training_repeat
for training_sets
// 가중치로 net, out 계산
forward pass
//output 레이어에서 시작해 input + 1 레이어로
for i = output layer -> i = input layer + 1
for all nodes in layer i
set delta
//layer i와 i-1 사이에 있는 가중치 갱신
for all weights between layer i and layer i-1
update weight
5.4 글로벌 미니멈과 로컬 미니멈
경사하강법은 임의의 시작점에서 시작하여 반복적으로 최적의 파라미터값을 찾아 나갑니다. 매번 반복할 때마다 우리는 먼저 오차 함수가 해당 점에서 갖는 기울기를 계산합니다. 만약 해당 점에서 오차 함수의 기울기가 0이라면 로컬 미니멈에 도달했다는 뜻입니다. 즉 파라미터의 반복 갱신이 그곳에서 멈출 것입니다.
만약 오차 함수가 하나의 로컬 미니멈만을 갖는다면, 찾은 로컬 미니멈이 바로 글로벌 미니멈이 됩니다. 그러나 오차 함수가 다수의 로컬 미니멈을 갖는다면 글로벌 미니멈을 찾을 수 있을 것으로 보장할 수 없습니다. 후자의 상황에서 우리는 '로컬 미니멈 함정에 빠졌다'고 표현하고 이는 우리가 원하는 결과가 아닙니다.
이를 해결하기 위한 전략은 다음과 같습니다.
- Simulated Annealing : 각 스테이지에서 일정한 확률로 현재 해보다 나쁜 결과를 받는 방식
- Stochastic Gradient Descent : 기울기 계산 시 랜덤 요소를 추가
5.5 기타 신경망
- RBF(Radial Bias Function) 신경망
- ART(Adaptive Resonance Theory) 신경망
- SOM(Self-Organizing Map) 신경망
.
.
.
Reference
- 단단한 머신러닝 - 머신러닝 기본 개념을 제대로 정리한 인공지능 교과서, Zhou Zhihua
- https://0-sunny.tistory.com/71?category=922300
- https://goofcode.github.io/back-propagation
Author And Source
이 문제에 관하여([단단한 머신러닝] 5장 신경망), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhbale11/단단한-머신러닝-5장-신경망저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)