완전히 연결된 신경망(fully connected neural network)이란 무엇인가?
완전히 연결된 신경망은 이름에서 알 수 있듯이 인접한 두 계층 사이의 두 노드 사이에 연결이 있다는 것이다.
또한 가장 일반적인 모델이다(예: CNN과 비교 하면).
전체 노드 다 연결되어 있기 때문에 더 많은 가중치와 연결이 발생하므로 더 많은 메모리와 계산이 필요하다.
단순하게 상상하면 다음과 같은 그림이 머릿속에 떠오를 수 있다.
네, 왼쪽이 입력, 중간이 계산, 오른쪽이 출력입니다.방정식으로 설명하면 \(O = f(X)\)로 쓸 수 있다.
여기서 대문자 \(O\)는 찾아야 할 대상 값을 나타내고 대문자 \(X\)는 전체 입력 데이터를 나타내며 \(\)f 매핑은 입력 데이터와 원하는 대상 데이터 사이의 다리를 나타낸다.
그렇다면 신경망을 임의의 함수(여기서 함수는 매우 복잡하며 실제로 모델과 동일함)에 맞는 블랙박스로 이해할 수 있나?
그러나 우리는 여전히 더 많은 구현 원칙을 알고 싶습니다면 이 수준의 이해로는 충분하지 않다.
인공 신경망은 인간의 두뇌를 시뮬레이션하여 만든 알고리즘이라는 것을 알고 있다.
더욱이 인간의 뇌는 수백억 개의 신경 세포로 구성되어 있다.
따라서 우리는 뉴런 세포의 구조와 정보 처리 방식에 대한 이해가 필요하다.
인간의 뉴런과 인공 신경망의 노드
생물학적 관점에서 그 구조와 기능을 분석하는 것은 너무 복잡할 것이다.
구조적으로 보면,뉴런은 다양한 모양과 기능을 가지고 있지만 크게 세포체(Cell body, or Soma)와 신경돌기의 두 부분으로 나눌 수 있다.
신경돌기에는 수상돌기(Dendrites)와 축삭돌기(Axon)의 두 가지 유형이 있습니다.그리고 긴 것은 축삭돌기이고 짧은 것은 수상돌기이다.
기능적으로 보면,뉴런의 종류에 관계없이 수신 영역, 트리거 영역, 전도 영역 및 출력 영역(실제로 후자의 두 영역은 집합적으로 출력 영역이라고 할 수 있음)의 네 부분으로 나눌 수 있다.
그렇다면 뉴런의 정보처리 과정은 여러 개의 수상돌기에서 자극 신호를 전달받은 후 처리를 거치고나서 하나의 축삭에서 출력되는 과정으로 요약될 수 있나?
여기까지만 이해하시면 된다.
인간의 뇌는 인공 신경망에 해당하므로 해당 뉴런 세포는 당연히 단일 노드이다.
앞서 제안한 \(f(x)\) 블랙박스(모델) 함수를 살펴보면 입력 데이터 \(X\)와 출력 데이터 \(O\)의 대응 관계는 무엇인가?
자세한 구현 과정은 설명하기 어렵지만 \(f(x)\)에는 선형 및 비선형의 두 가지 대응 관계가 있다.
선형 표현식은 일반적으로 1차 방정식이고 비선형 표현식은 2차 이상의 방정식이다.
이는 임의의 함수에 맞추려는 원래 의도와 일치하다.
실제로 입력 이벤트의 우선 순위를 지정하는 프로세스는 가중 프로세스, 즉 선형 변환한다.
그리고 이러한 이벤트를 출력해야 하는지 여부를 판단하는 것은 참과 거짓 값 판단 문제(0은 출력하지 않거나 1은 출력), 즉 비선형 변환한다.
따라서 여기서 우리는 유추 방법을 통해 인간 두뇌의 정보 처리 과정을 설명하기 위해 노드 내부에 작은 \(f(x)\)함수(이전에 구성된 모델 함수 \(f(x)\)와 다름)를 구성할 수도 있다.
예를 들어 \(f(x) = activate(Sum\) \(up(x * weight) + bias)\) 수식이다.
사실 여기서 \(f(x) \) 는 Taylor 공식의 1차원 전개로 볼 수 있으므로 여기에 고차원 오차 \(\varepsilon \)를 추가해야 하는데, 일반적으로 고차원이므로 생략한다.
따라서 엄밀히 말하면 여기의 \(f(x) \)는 근사치이다.
그러나 이 공식은 단지 이해의 편의를 위해 작성되었으며 엄밀한 수학적 작성은 다음과 같아야 한다.
\[f(x) = \sigma (\sum (X * W) + b)\]
그는 실제로 세 단계가 있다.
첫 번째 단계는 각 입력 신호(\(X\))를 일정 비율로 늘리거나 줄이는 것(가중 계수 \(W\)를 곱함)이다.
두 번째 단계는 모든 신호를 누적하고 편차(\(b\))를 추가하는 것이다.
변경할 수 있는 가중치와 편차가 반복 중에 예상 값에 더 가까운 결과를 가져올 수 있기 때문에 이것은 마술이다!
마지막 단계는 출력을 활성화하는 것, 즉 방금 얻은 결과를 전체적으로 판단하는 것이다(비선형 변환\(\sigma\)에 대입).
이 활성화 함수를 선형변환 결과가 0보다 크면 1을 출력하고, 선형변환 결과가 0보다 작거나 같을 때 숫자 0을 출력하도록 설정하면,그러면 이 모델은 흔히 말하는 퍼셉트론(Perceptron) 모델이 된다.
그림을 그리고 봅시다.
2차원 평면에서 2분류 문제를 풀 수 있다! 이와 같다.
실제로 가장 일반적으로 사용되는 Relu, Sigmoid, Tanh, Softmax 등과 같은 활성화 함수가 많이 있다.
필요에 따라 선택하여 사용할 수 있다.
위에서 구성한 뉴런 세포와 신경망 노드 모두 기능 분할 측면에서 여러 입력을 가질 수 있지만 출력은 하나(단일 노드)뿐이다.
그리고 그 마법은 뉴런 세포가 의사 결정 부분을 만드는 방법에 대한 시뮬레이션인 은닉층에 있다.
인공신경망과 신경세포 기능 간의 높은 일관성에서 신경망을 설계한 선조들이 매우 섬세함을 알 수 있다!
그렇다면 은닉층의 시뮬레이션을 구현하는 방법은 무엇인가?
순방향 전파(Forward propagation) 알고리즘
신경망 연구로 돌아갈 때입니다. 하나의 레이어만 있는 은닉층이 어떻게 구현되는지 먼저 살펴보겠다.
여기에서 언급한 레이어는 실제로 입력층을 포함하고 있지만, 이층은 정보 처리 기능이 없기 때문에 신경망의 레이어로 볼 수 없다고 생각한다.
그것은 세포의 수지상 부분과 더 비슷하다.
그리기 전에 선형 변환과 비선형 변환의 처리를 두 개의 노드로 분리해야 한다.
뉴런 세포의 경우 이 과정이 하나의 세포에서 이루어지지만 인공적인 구현의 경우 단순할수록 좋겠나?
사실, 얼마나 많은 노드가 설정되었는지는 중요하지 않다.
이것은 하나의 레이어만 포함하는 은닉층이다.
세로로 배열된 n개의 뉴런 노드로 이해할 수 있나?
노드는 하나의 특성 판별만 수행할 수 있기 때문에(예를 들어 위의 퍼셉트론은 2개의 클래스 분류만 수행할 수 있음) 네트워크를 구성하려는 경우 이러한 스택 방법은 의심할 여지 없이 실현 가능하다.
위의 그림은 여전히 수학 방정식으로 표현할 수 있다.
다중 입력, 다중 선형 변환 및 다중 비선형 변환이 있기 때문에 선형 대수의 행렬(벡터라고도 할 수 있슴)을 사용하여 입력 세트에 대한 연산 세트를 간단히 표현할 수 있다.
입력 데이터는 \(X = [x_1, x_2, ..., x_j, ..., x_n]\) 수식으로 기록된다.
가중치는 \(W = \left[\begin{array}{ccc}
w_{11}& w_{12} & \cdots & w_{1j} & \cdots & w_{1n} \\
w_{21}& w_{22} & \cdots & w_{2j} & \cdots & w_{2n} \\
\vdots & \vdots & \ddots & \vdots & \ddots & \vdots \\
w_{j1}& w_{j2} & \cdots & w_{jj} & \cdots & w_{jn} \\
w_{n1}& w_{n2} & \cdots & w_{nj} & \cdots & w_{nn}
\end{array}\right]^T\) 수식으로 기록된다.
가중치 행렬이 여기서 전치되어야 하는 이유는 무엇인가?
입력 행렬 X의 왼쪽에 가중치 행렬 W를 곱하고 싶기 때문에 선형 대수의 규칙에 따라 전면 행렬의 열 개수는 후면 행렬의 행 개수와 같아야 한다.
비슷하게 절편값은 \(B = [b_1, b_2, ..., b_j, ..., b_n]^T\) 수식으로 기록된다.
선형 연산의 결과 값은 \(Y = [y_1, y_2, ..., y_j, ..., y_n]^T\) 수식으로 기록된다.
그런 다음 선형 연산 프로세스는 \( Y = W^T * X + B^T \) 수식으로 표현된다.
확장하면 이런 모습이다.
\(\left[\begin{array}{c}
y_1 \\
y_2 \\
\vdots\\
y_j \\
\vdots \\
y_n
\end{array}\right]=\left[\begin{array}{ccc}
w_{11}& w_{12} & \cdots & w_{1j} & \cdots & w_{1n} \\
w_{21}& w_{22} & \cdots & w_{2j} & \cdots & w_{2n} \\
\vdots & \vdots & \ddots & \vdots & \ddots & \vdots \\
w_{j1}& w_{j2} & \cdots & w_{jj} & \cdots & w_{jn} \\
w_{n1}& w_{n2} & \cdots & w_{nj} & \cdots & w_{nn}
\end{array}\right]^T *\left[\begin{array}{c}
x_{1} \\
x_2 \\
\vdots \\
x_j \\
\vdots \\
x_n
\end{array}\right]+\left[\begin{array}{c}
b_1 \\
b_2 \\
\vdots \\
b_j \\
\vdots \\
b_n
\end{array}\right]\)
(참고: \(w_ij\)의 \(i\)는 은닉층의 노드 번호를 나타내고, \(j\)는 입력층의 노드 번호를 나타낸다.)
비선형 연산의 결과 값은 \(Z = [z_1, z_2, ..., z_j, ..., z_n]^T\) 수식으로 기록된다.
비선형 변환은 \( Z = \sigma (Y^T) \) 수식으로 표현된다.
이러한 연산자가 없기 때문에 여기에서 확장할 수 없다.
강제로 확장하면 다음과 같다.
\( \left[\begin{array}{c}
z_{1} \\
z_{2} \\
\vdots \\
z_{j} \\
\vdots \\
z_{n}
\end{array}\right]=\left[\begin{array}{c}
\sigma_{1} \\
\sigma_{2} \\
\vdots \\
\sigma_{j} \\
\vdots \\
\sigma_{n}
\end{array}\right] Map \left[\begin{array}{c}
y_{1} \\
y_{2} \\
\vdots \\
y_{j} \\
\vdots \\
y_{n}
\end{array}\right]=\left[\begin{array}{c}
\sigma_{1}\left(y_{1}\right) \\
\sigma_{2}\left(y_{2}\right) \\
\vdots \\
\sigma_{j}\left(y_{j}\right) \\
\vdots \\
\sigma_{n}\left(y_{n}\right)
\end{array}\right]\)
여기에서 Map 연산자는 실제로 Python의 map 함수에서 차용되었다.
이전 행렬의 요소를 다음 행렬의 해당 요소의 독립 변수로 대입하여 연산을 수행하는 것을 의미한다.
여기 은닉층에 레이어 하나만 포함된 경우이다.
은닉층에 많은 레이어가 포함되어 있으면 어떻게 되나?
많은 레이어가 추가되었으므로 범례의 모든 매개 변수 속성 값에 레이어 수 플래그도 추가해야 한다.
여기서는 레이어 통계를 수행하기 위해 오른쪽 상단 모서리에 (num)을 추가하는 방법을 사용한다.
이전 입력은 모두 대문자 X로 표시되고 1차 선형 변환 및 1차 비선형 변환 후 얻은 결과는 대문자 Z로 표시된다는 점에 유의해야 한다.
그리고 1차 계산 후 얻은 Z값이 다음 계산의 입력값으로 사용되기 때문에 위 그림의 모든 입력값은 모두 대문자 Z로 표시되어 있다.
결국 n번째 레이어를 계산한 후 얻은 결과 \(Z^{(n+1)}\)은 실제로 네트워크의 최종 출력 결과 \(Z^{(out)}\)이다.
그렇다면 여러 개의 은닉층이 있는 신경망은 방정식으로 어떻게 표현되나?
사실, 그것은 연쇄 법칙의 반대이다.
연쇄 유도법칙은 겹겹이 벗겨내는 것이고, 여기에서는 안쪽을 겹겹이 감싸는 것이다.
전체 네트워크의 대략적인 프로세스는 이 수식으로 요약할 수 있다.
\[ Z^{(out)} = Z^{(n + 1)} = \sigma ^{(n)}(\cdots \sigma ^{(2)}({W^{(2)}}^{T} * (\sigma ^{(1)} ({W^{(1)}}^{T}*Z^{(0)}+B^{(1)})
+B^{(2)})\cdots + B^{(n)}) \]
일반적으로 모델(위의 '러시아 마트료시카'는 모델이다.)을 얻은 후 피팅 효과를 평가해야 한다.
일반적으로 차이 방법은 평가 모델을 구성하는 데 사용된다.
예를 들어 실제 값과 예측 값의 차이를 지표로 사용한다.
그런 다음 그 차이는 가능한 한 작아야 한다.
예를 들어 \( Loss = |Z^{(out)} - Z^{(real)}| \)와 같은 수식을 작성합시다.
이 공식은 목적 함수라고도 하는 손실 함수이다.
여기서 실제값과 추정값의 차이의 절대값으로 표현한다.
이 공식에는 실제로 Mse, Cross-entropy 등과 같은 많은 표현식이 있다.
필요에 따라 선택하여 사용할 수 있다.
그림을 그릴 시간이다.
먼저 위 그림의 \(Z^{(n + 1)}\)를 \(Z^{(out)}\)로 바꾼다.
그런 다음 Loss 함수의 값을 출력 계층으로 사용한다.
예측 가치는 \(Z^{(out)} = [z_1^{(out)}, z_2^{(out)}, ..., z_j^{(out)}, ..., z_n^{(out)}]^T\) 수식으로 기록된다.
실제 값은 \(Z^{(real)} = [z_1^{(real)}, z_2^{(real)}, ..., z_j^{(real)}, ..., z_n^{(real)}]^T\) 수식으로 기록된다.
손실 함수의 계산 결과는 \(L= [l_1, l_2, ..., l_j, ..., l_n]^T\) 수식으로 기록된다.
여기서 구성된 손실 함수는 \( L = | Z^{(out)} - Z^{(real)} | = |[z_1^{(out)}, z_2^{(out)}, ..., z_j^{(out)}, ..., z_n^{(out)}]^T - \)
\([z_1^{(real)}, z_2^{(real)}, ..., z_j^{(real)}, ..., z_n^{(real)}]^T |= |[l_1, l_2, ..., l_j, ..., l_n]^T | \) 수식으로 표현될 수 있다.
사실, 우리가 지금까지 논의한 것은 완전한 신경망이 아닌다.
주의할 수 있기 때문에 지금까지 이미지의 모든 네트워크가 왼쪽에서 입력되고 오른쪽에서 출력됨을 알 수 있다(화살표는 모두 오른쪽을 가리킴).
따라서 현재 네트워크는 더 정확한 이름인 다층 퍼셉트론(Multilayer Perception,약어 MLP)을 갖은다.
이 네트워크에는 순방향 전파 알고리즘(Forward Propagation)이라는 특히 중요한 개념도 포함되어 있다.
순방향 전파 알고리즘은 앞에서 요약한 '러시아 마트료시카' 공식에서 방금 찾은 손실 함수까지의 과정이다.
인간의 두뇌는 자의적인 결정을 내릴 수 있을 뿐만 아니라 이러한 결정에서 자신의 발달에 가장 유익한 부분을 선택하고 행동할 수 있기 때문에 강력하다.
그러면 위의 네트워크가 예측값을 자동으로 최적화할 수 있나(즉, 손실 함수를 최소화)?
역전파(영어: Backpropagation, 약칭 BP) 알고리즘
전체 모델을 최적화하려면 전체 오차를 구해야 한다.
따라서 위에서 얻은 손실 함수 계산 결과의 행렬 L의 모든 요소를 합산한다.
여기서 우리는 \( L_{total} = \textstyle \sum_{i = 1}^{n} | z_i^{(out)} - z_i^{real} |\) 수식을 얻은다.
총 오차를 얻은 후 모든 가중치 값과 편견 값을 업데이트할 수 있다.
가중치 매개변수 \(w_{21}^{(5)}\)를 예로 들면 \(w_{21}^{(5)}\)가 전체 오차에 얼마나 영향을 미치는지 알고 싶다면 전체 오차를 사용하여 \(w_{21}^{(5)}\)의 편미분을 얻을 수 있다. (연쇄 규칙 사용)
수학 공식으로 \( \frac{\partial L_{total}}{\partial w_{21}^{(5)}}=\frac{\partial L_{total}}{\partial {l}_{1}} \times \frac{\partial {l}_{1}}{\partial \boldsymbol{z}_1^{(out)}} \times \cdots \times \frac{\partial \boldsymbol{z}_1^{(6)}}{\partial {y}_1^{(5)}} \times \frac{\partial {y}_1^{(5)}}{\partial w_{21}^{(5)}} \) 수식으로 요약할 수 있다.
이것은 실제 계산 과정이 아닌 예시일 뿐이다!
따라서 여기에 모든 매개변수에 대한 총 손실의 편미분 계산 수식을 일반화할 수 있다.
\[ \frac{\partial L_{total}}{\partial w_{i j}^{(l)}}=\frac{\partial L_{total}}{\partial \mathbf{z}^{(o u t)}} \times \frac{\partial \mathbf{z}^{(o u t)}}{\partial \boldsymbol{y}^{(n)}} \times \cdots \times \frac{\partial \boldsymbol{y}^{(l+2)}}{\partial \mathbf{z}^{(l+2)}} \times \frac{\partial \mathbf{z}^{(l+2)}}{\partial \boldsymbol{y}^{(l+1)}} \times \frac{\partial \boldsymbol{y}^{(l+1)}}{\partial z_{j}^{(l+1)}} \times \frac{\partial z_{j}^{(l+1)}}{\partial y_{j}^{(l)}} \times \frac{\partial y_{j}^{(l)}}{\partial w_{i j}^{(l)}} \]
한 문장으로 요약하면 목표 요인을 포함한 모든 변수의 연쇄 편도함수를 수행하는 것이다.
이 연속적인 미분 과정을 소위 연쇄법칙이라고 한다.
역전파가 연쇄 법칙으로 요약될 수 있는 이유는 무엇인가?
기울기는 직관적으로 1차 근사로 이해되기 때문에 기울기는 출력에 대한 특정 변수 또는 중간 변수의 민감도 계수로 이해할 수 있다.
그러나 고차원의 경우 연쇄 규칙이 곱셈에서 야코비 행렬 곱셈으로 바뀌면 이해하기가 더 생생해지다.
신경망의 연쇄 규칙은 거의 고차원적이다.
이 연속적인 유도 과정은 선형 함수 부분의 유도와 비선형 함수 부분의 유도의 두 가지 범주로 나눌 수 있다.
수식으로 쓰면 \( \frac{\partial y}{\partial z} -\)선형변환에 대한 미분와 \( \frac{\partial z}{\partial y} -\) 비선형변환에 대한 미분가 된다.
그런 다음 선형 부분을 미분하면 일반적으로 가중치 W가 구해지고 비선형 부분에 대해서는 활성화 함수의 도함수가 일반적으로 구해지다.
W의 값은 인위적으로 초기화되며 매우 크거나 매우 작을 수 있다.
활성화 함수의 미분 부분은 일반적으로 1보다 작다.
따라서 연쇄 규칙이 계속해서 곱해진 후 결과는 0 또는 무한대가 될 수 있다.
이것은 기울기 소멸과 기울기 폭발의 문제이다.
그래디언트가 발견되었기 때문에 지금까지는 역전파가 종료되었다.
그러나 Loss에 대한 최적의 솔루션을 찾지 못했고 다양한 매개변수가 업데이트되지 않았다.
위의 예를 계속 사용한다면, 해당 편도함수\( \frac{\partial L_{total}}{\partial w_{21}^{(5)}} = 0\)일 때 \(w_{21}^{(5)}\) 값을 얻을 수 있다.
기울기 하강방법(Gradient descent)을 사용한다면 편미분을 구한 후 \( w_{ij}^{(l)^{new}} = w_{ij}^{(l)} - \eta * \frac{\partial L_{total}}{\partial w_{i j}^{(l)}}\) 수식을 통해 매개변수 \(w_{21}^{(5)}\)를 업데이트할 수 있다.
여기서 \( \eta \)는 업데이트의 진행 상황을 제어하는 데 사용되는 단계 크기 또는 학습률이라고 한다.
여기서 학습률은 이전 절편과 마찬가지로 최적화가 필요한 객체이기도 한다.
이것은 최적화 문제로 발전했다.
최종적으로 신경망을 요약하면 생물학적 신경망의 구조와 기능을 모방한 수학적 모델 또는 계산 모델로 함수를 추정하거나 근사하는데 사용되며, 매개변수를 자동으로 업데이트할 수 있다.
더 간결하게 말하면, 신경망은 '보편적 모델 + 오류 수정 기능'이다.
Comments