Artificial Neural Network (non-linear model)

chelseey·2025년 6월 5일

Artificial neural network (ANN)

Cores: perceptron

퍼셉트론(Perceptron) 단위 구조

  • 입력 신호(x₁,…,xₘ)

  • 시냅스 가중치(wₖ₁,…,wₖₘ), 바이어스(bₖ)

  • 가중합 (Summing Junction)

    vk=i=1mwkixi+bkv_k = \sum_{i=1}^{m} w_{ki}\,x_i + b_k
  • 활성화 함수(φ) : 입력 vkv_{k}을 비선형 변환하여 yk=φ(vk)y_{k} = \varphi\bigl(v_{k}\bigr) 출력

다층 퍼셉트론(MLP) / 심층 신경망(DNN)

층이 깊어질수록 더 높은 차원의 특징(feature)을 추출
ex. 단순 에지(edge) → 형태(shape) → 객체(Object)

Cores: activation functions

→ 비선형성 부여 : 여러 층을 겹쳐도 결국 선형 결합만 하면 표현력이 제한

  • Sigmoid : y=11+ezy = \frac{1}{1 + e^{-z}}

  • ReLU : max(0,z)max(0,z)

  • Leaky ReLU : max(0.1z,z)max(0.1z,z)

multilayer perceptron

입력층 → 하나 이상의 은닉층 → 출력층으로 구성

은닉층(Hidden Layers)

  • 각 층마다 가중합 + 비선형 활성화 함수 적용
  • 층이 깊어질수록 더 복잡한 특징(feature)·패턴을 추출

→ 단층 퍼셉트론으로 풀 수 없던 XOR 문제(비선형 분리 문제) 해결

ex. XOR 문제를 푸는 2-layer MLP

1층 퍼셉트론(은닉 유닛 두 개)

  • y1=σ(5x1+5x28)y_1=σ(5x_1+5x_2−8)
    : 두 입력 모두 1일 때만 5+5−8=2 → σ(2)≈1 (AND 게이트 역할)

  • y2=σ(7x17x2+3)y_2=σ(−7x_1−7x_2+3)
    : 두 입력 모두 0일 때만 0+0+3=3 → σ(3)≈1 (NOR 게이트 역할)

2층 퍼셉트론(출력 유닛 하나)

yˉ=σ(11y111y2+6)\bar{y} = \sigma\bigl(-11\,y_1 - 11\,y_2 + 6\bigr)
  • y1y_1 또는 y2y_2 중 하나만 1일 때 → σ(5)0σ(−5)≈0
  • y1y_1 또는 y2y_2 이 모두 0일 때 → σ(6)1σ(6)≈1

deep neural network

입력층(Input Layer)

: 원본 이미지나 특성 벡터를 받아들임.

은닉층(Hidden Layers)

  • 첫 번째 은닉층
    : 엣지(edge), 선(line), 원(circle) 같은 저수준 특징(feature) 추출

  • 두 번째 은닉층
    : 얼굴의 눈·코·입 등 중간 수준 패턴 결합

  • 세 번째 은닉층
    : 사람 얼굴 전체 모양·식별 가능한 고수준 특징 학습

출력층(Output Layer)

: 최종 클래스(ex. “Mark”)나 예측값을 산출

ex. MNIST 손글씨 숫자 인식

Signal flow (forward,순전파)

입력 → 층별 가중합 → 활성화 → 다음 층 입력 을 반복하여,
마지막 출력층에서 모델의 예측값(가설, hypothesis) 을 계산해 내는 과정

  1. 입력층(Input Layer) 에서 신호 x1,x2x_1,x_2가 들어옴

  2. 은닉층(Hidden Layer) 각 뉴런으로 연결되어,
    각 은닉 유닛 ii

    vi=wi1x1+wi2x2+bi        yi=fi(vi)v_i = w_{i1}x_1 + w_{i2}x_2 + b_i \;\implies\; y_i = f_i(v_i)

    와 같이 선형 결합 후 활성화 함수 fif_i를 거쳐 출력 yiy_i 생성

  3. 출력층(Output Layer) 에서 은닉층 출력을 다시 가중합 및 활성화

    vout=iwout,iyi+bout        y=fout(vout)v_{\text{out}} = \sum_{i} w_{\text{out},i}\,y_{i} + b_{\text{out}} \;\implies\; y = f_{\text{out}}(v_{\text{out}})

    최종 예측값 y 산출

Error flow (backward, 역전파)

손실 함수(loss) 값이 최소가 되도록, 각 가중치(weight) 기여도를 계산
⇒ 이를 토대로 가중치 갱신

손실 계산: 예측값과 정답(ground-truth)의 차이를 정의된 손실 함수(L)로 수치화

역전파(Backward)

  • 출력층에서부터 손실 L에 대한 각 가중치의 미분(∂L/∂w) 를 차례로 계산

  • 체인 룰(chain rule) 적용해,
    출력층 → 은닉층 → 입력층 방향으로 오차 신호 전파

  • 가중치 업데이트:

    wwηLww \gets w - \eta\,\dfrac{\partial L}{\partial w}

    (학습률 η)

Error measure

이진 분류(Binary Classification)

  • 출력층 활성화 함수: 시그모이드 함수

    hk=σ(sk),sk=jwkjzjh_{k} = \sigma(s_{k}),\quad s_{k} = \sum_{j} w_{kj}\,z_{j}

    → 출력값을 [0,1] 확률로 바꿈

  • 손실 함수: 이진 크로스엔트로피(Binary Cross-Entropy)

    J=k=1K[yklog(hk)+(1yk)log(1hk)]J = -\sum_{k=1}^{K}\bigl[y_{k}\log(h_{k}) + (1 - y_{k})\log(1 - h_{k})\bigr]

yky_k: 0/1로 이루어진 정답(one-hot 벡터)

다중 클래스 분류(Multi-class Classification)

  • 출력층 활성화 함수: 소프트맥스(Softmax)

    hk=esklesl,where  sk=jwkjzjh_{k} = \dfrac{e^{s_{k}}}{\sum_{l} e^{s_{l}}},\quad\text{where}\;s_{k} = \sum_{j} w_{kj}\,z_{j}

    → 각 클래스에 대한 확률 분포로 변환

  • 손실 함수: 소프트맥스 크로스엔트로피(Softmax Cross-Entropy)

    J=k=1Kyklog(hk)J = -\sum_{k=1}^{K} y_{k}\,\log(h_{k})

회귀(Regression)

  • 출력층 활성화 함수: 일반적으로 선형(identity)

  • 손실 함수: L2 손실(Mean Squared Error)

    J=12k=1K(ykhk)2J = \frac{1}{2}\sum_{k=1}^{K}(y_{k} - h_{k})^{2}

    yk,hky_{k},h_{k}: 연속(real-valued) 타깃과 예측값

training and testing

훈련 단계 (Training)

: 손실 함수(loss)를 최소화하는 최적의 가중치 w 찾기

  • 순전파(Forward Pass)
    : 입력 → 네트워크 → 예측값 계산

  • 역전파(Backward Pass)
    예측값과 정답의 차이(오차)를 출력층에서부터 입력층 방향으로 전파.
    각 가중치가 손실에 얼마나 기여했는지(gradient)를 계산

테스트 단계 (Testing)

: 학습된 가중치로 새로운 입력에 대한 예측 수행

  • 단 한 번의 순전파(Forward Pass)
    입력 → 네트워크 → 출력층에서 바로 예측값 산출

ANN for non-linear problem

Deep ANN에서도,
의도한 대로 학습이 이루어지지 않아 정확도(Accuracy)가 낮게 나올 수 있음

Sigmoid 활성화 함수의 특성

  • 출력 범위가 (0, 1)로 한정
    σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}
    큰 양수 입력에 대해 1에 근접, 큰 음수에 대해 0에 근접

  • 미분(기울기)이 매우 작아짐
    σ(z)=σ(z)(1σ(z))\sigma'(z) = \sigma(z)\,(1 - \sigma(z))
    입력 절대값이 크면 클수록 기울기가 거의 0에 가까워짐

Gradient Vanishing 문제

역전파 시 연쇄 법칙(chain rule) 에 의해

Lw1=Loutput  ×  outputhiddenn  ×    ×  hidden1w1\frac{\partial L}{\partial w_{1}} = \frac{\partial L}{\partial \mathrm{output}} \;\times\; \frac{\partial \mathrm{output}}{\partial \mathrm{hidden}_{n}} \;\times\; \cdots \;\times\; \frac{\partial \mathrm{hidden}_{1}}{\partial w_{1}}

각 층의 작은 미분값 σ(z)\sigma'(z)이 곱해지면서,
초기 은닉층 쪽으로 갈수록 기울기(gradient)가 거의 0에 수렴
→ 가중치가 갱신되지 않음

Forward pass in fully-connected layers

완전연결(Fully-Connected) 층에서의 순전파(Forward Pass) 과정

입력층 → 은닉층

zj(x)=σ ⁣(i=0dwjixi)(j=1,,H)z_{j}(\mathbf{x}) = \sigma\!\bigl(\sum_{i=0}^{d} w_{ji}\,x_{i}\bigr)\quad (j = 1,\dots,H)

x=(x1,,xd)\mathbf{x}=(x_1,…,x_d): 입력 벡터
wjiw_{ji}: 입력층 i번 뉴런 → 은닉층 j번 뉴런 가중치
σσ: 활성화 함수(ex. Sigmoid, ReLU)

은닉층 → 출력층

hk(x)=σ ⁣(j=0Hwkjzj)(k=1,,K)h_{k}(\mathbf{x}) = \sigma\!\bigl(\sum_{j=0}^{H} w_{kj}\,z_{j}\bigr)\quad (k = 1,\dots,K)

z=(z1,,zH)z=(z_1,…,z_H): 은닉층 활성화값
wkjw_kj: 은닉층 j번 뉴런 → 출력층 k번 뉴런 가중치

최종 출력 h=(h1,,hK)h=(h_1,…,h_K)

오차 측정(Loss)

출력 h와 정답 y 간 손실 함수를 계산하여,
역전파로 각 w를 갱신

Learning objective and optimization

샘플별 오차 εn(w)\varepsilon_{n}(\mathbf{w})는 모든 가중치 w\mathbf{w}에 의존

손실 함수 정의 (Learning Objective)

L2 손실을 가정하면,

εn(w)=12k=1K(hk(xn;w)yn,k)2\varepsilon_{n}(\mathbf{w}) = \frac{1}{2}\sum_{k=1}^{K}\bigl(h_{k}(x_{n};\mathbf{w}) - y_{n,k}\bigr)^{2}

hkh_{k} : 네트워크 출력, yn,ky_{n,k}은 정답

전체 훈련 손실

E(w)=1Nn=1Nεn(w)E(\mathbf{w}) = \frac{1}{N}\sum_{n=1}^{N}\varepsilon_{n}(\mathbf{w})

이를 최소화하는 최적 가중치 : w=argminwE(w)\mathbf{w}^* = \arg\min_{\mathbf{w}} E(\mathbf{w})

확률적 경사 하강법 (SGD)

wwηwεn(w)\mathbf{w} \leftarrow \mathbf{w} - \eta\,\nabla_{\mathbf{w}}\varepsilon_{n}(\mathbf{w})

η\eta : 학습률(learning rate), εn∇ε_n : 샘플 n에 대한 손실 기울기

Back propagation (BP)

인공신경망 학습에서 손실(오류) 함수에 대한 기울기(gradient) 를 계산해,
가중치 w를 효율적으로 업데이트

BP: Data flow

출력층 sensitivity

출력 hkh_k와 정답 yky_k가 직접 연결되어 있으므로,

Ewkj=Ehk  ×  hksk  ×  skwkj\frac{\partial E}{\partial w_{kj}} = \frac{\partial E}{\partial h_{k}} \;\times\; \frac{\partial h_{k}}{\partial s_{k}} \;\times\; \frac{\partial s_{k}}{\partial w_{kj}}

를 바로 계산 가능

은닉층 sensitivity

은닉 유닛 zjz_j가 여러 출력 유닛 hkh_k에 연결돼 있어,

Ewji=kEhk  ×  hksk  ×  zjsj  ×  sjwji\frac{\partial E}{\partial w_{ji}} = \sum_{k} \frac{\partial E}{\partial h_{k}} \;\times\; \frac{\partial h_{k}}{\partial s_{k}} \;\times\; \frac{\partial z_{j}}{\partial s_{j}} \;\times\; \frac{\partial s_{j}}{\partial w_{ji}}

와 같이 출력층 오차가 은닉층까지 복합적으로 전파되어야 하므로 복잡

Backpropagation 신호 흐름

입력 신호 xix_{i}
→ 은닉 유닛 zj=φ ⁣(iwjixi+bj)z_{j} = \varphi\!\bigl(\sum_{i} w_{ji} x_{i} + b_{j}\bigr)
→ 출력 유닛 hk=φ ⁣(jwkjzj+bk)h_{k} = \varphi\!\bigl(\sum_{j} w_{kj}\,z_{j} + b_{k}\bigr)

출력 hkh_k를에서 목표값 yky_k를 빼면 오차 ek=hkyke_k=h_k-y_k

BP: credit assignment

hidden to output layer

손실 함수 EE를 최소화하기 위해,
출력층 가중치 wkjw_{kj}에 대한 편미분 Ewkj\frac{\partial E}{\partial w_{kj}}를 구함

sensitivity factor 체인 룰로 구하기 (Weight gradient)

Ewkj=Esk  skwkj=Esk×zj=δkzj\frac{\partial E}{\partial w_{kj}} = \frac{\partial E}{\partial s_{k}}\;\frac{\partial s_{k}}{\partial w_{kj}}= \frac{\partial E}{\partial s_{k}}\times z_{j} = \delta_{k}\,z_{j}

sk=jwkjzjs_k = \sum_{j} w_{kj}\,z_{j} (출력층 선형 입력)

로컬 그라디언트 δkδ_k (Local gradient)

δk=Esk=Ehk  hksk=ekσ(sk)\delta_{k} = \frac{\partial E}{\partial s_{k}} = \frac{\partial E}{\partial h_{k}}\;\frac{\partial h_{k}}{\partial s_{k}} = e_{k}\,\sigma'(s_{k})

가중치 업데이트 (SGD)

wkjwkjηEwkj=wkjηδkzjw_{kj} \gets w_{kj} - \eta \,\frac{\partial E}{\partial w_{kj}} = w_{kj} - \eta\,\delta_{k}\,z_{j}

한 스텝마다 “오차 신호 δk\delta_{k}와 은닉층 출력 zjz_{j}의 곱으로 가중치를 보정

input to hidden layer

  1. 출력층에서 δkδ_k 계산

  2. 은닉층으로 오차 전파

    δj=Esj=kEskskzjzjsj=kδkwkjσ(sj).\delta_{j} = \frac{\partial E}{\partial s_{j}} = \sum_{k} \frac{\partial E}{\partial s_{k}} \,\frac{\partial s_{k}}{\partial z_{j}} \,\frac{\partial z_{j}}{\partial s_{j}} = \sum_{k} \delta_{k}\,w_{kj}\,\sigma'(s_{j})\,.
  3. 가중치 wjiw_{ji} 갱신

BP: pseudo code

  1. 가중치 초기화
    모든 wji,wkjw_{ji},w_{kj} 를 작은 랜덤값으로 세팅

  2. 반복 학습(Training Loop)

  • 샘플 선택
    : 훈련 데이터 중 하나 n을 뽑음

  • 순전파(Forward)
    : 입력 xnx_n으로부터 은닉층 출력값 zjz_j, 출력층 출력값 hkh_k 계산

  • 역전파(Backward)
    : 출력층 오차 δkδ_k 계산, 은닉층 오차 δjδ_j 계산

  • 가중치 업데이트(위치별)
    : 은닉 → 출력층 (wkjw_{kj}): wkjwkjηδkzjw_{kj}←w_{kj}−ηδ_kz_j
    입력 → 은닉층 (wjiw_{ji}): wjiwjiηδjxiw_{ji} \leftarrow w_{ji} - \eta\,\delta_{j}\,x_{i}

  1. 종료 조건 확인
    정해진 에폭(epoch) 수 도달 또는 손실이 충분히 작아지면 반복 종료

  2. 결과 반환
    학습된 최종 가중치 {wji,  wkj}\{w^*_{ji},\;w^*_{kj}\} 반환

BP: vanishing gradient problem

시그모이드 활성화 함수 사용 시,
도함수 σ(s)=σ(s)(1σ(s))\sigma'(s) = \sigma(s)\,(1 - \sigma(s))가 항상 ≤0.25로 작음

깊은 층을 거칠수록 각 층의 작은 미분 값들이 곱해지며
기울기가 지수적으로 감소

결과: 은닉층 학습이 극도로 느려지거나 멈춤

가중치 업데이트 식

Δwji=ηEwji=ηδjxi=ησ(sj)(kδkwkj)xi\Delta w_{ji} = -\eta\,\frac{\partial E}{\partial w_{ji}} = -\eta\,\delta_{j}\,x_{i} = -\eta\,\sigma'(s_{j})\Bigl(\sum_{k}\delta_{k}\,w_{kj}\Bigr)\,x_{i}\,

σ(s)σ′(s)가 작으면 ΔwΔw도 작아져 학습 정체

Overcoming Vanishing Gradient

Sigmoid/tanh는 깊은 층에서 연쇄 곱셈으로 기울기를 빠르게 소실

해결책 :

  • ReLU 계열 활성화 함수 사용 → 양수 영역에서 기울기 1 유지
  • Unsupervised pre-training + fine-tuning

Difficulties with ANN

ANN의 한계 : 매개변수 폭발(Parameter Explosion)

완전연결(fully‐connected) 네트워크는
입력 차원을 크기를 그대로 가지는 은닉층을 여러 개 쌓으면,

파라미터 수 : θ=3D2+D∣θ∣=3D^2+D
(입력→은닉, 은닉→은닉, 은닉→출력 가중치 + 바이어스)

ex. 32×32 화소 이미지를 D=32^2개 입력으로 할 때:

θ=3(322)2+3223×106\lvert \theta\rvert = 3\cdot(32^2)^2 + 32^2 \approx 3\times 10^6

→ 학습 난이도↑, 오버피팅 및 지역 최적해에 빠질 위험↑

해결책 : Convolutional Neural Networks (CNN)

입력 전체 대신 작은 필터를 여러 위치에 적용 → 파라미터 수 대폭 절감

Breakthrough in BP

BP(Backpropagation)의 해결책

Unsupervised Pre-training + Fine-tuning

  • Deep Belief Networks
    : 각 은닉층을 비지도 학습(RBM, 오토인코더)으로 사전 학습
  • 이어서 전체 네트워크를 지도학습으로 미세조정 → 기울기 소실 완화

Convolutional Neural Networks (CNNs)

  • 파라미터 공유·국소 수용 영역 도입 → 매개변수 수 감소

Rectified Linear Unit (ReLU)

  • f(x)=max(0,x)f(x) = \max(0, x), 양수 구간 도함수 1 → 그래디언트 소실 대폭 감소

Dropout

  • 학습 시 무작위로 일부 뉴런 생략 → 과적합 완화, 일반화 성능 향상

0개의 댓글