Replicated

인공신경망 개요 본문

학부/딥러닝

인공신경망 개요

라구넹 2025. 10. 18. 17:36

Perceptron

- 가장 단순한 형태의 신경망

- 다수의 신호를 입력으로 받아들여 하나의 원하는 신호를 출력하는 알고리즘

φ(v) = w1x1 + w2x2 + w3x3 + b

w: 가중치

b: 편향(bias)

v: 가중합 (weighted sum)

φ() : 활성함수

 

v = wx^T + b

w, b, φ를 잘 조절하면 됨

 

Weight value

- 전기 회로에서 저항에 해당

- 저항값이 크면 전류가 적게, 작으면 전류가 많이

- 인공 신공망에선 Weight value가 크면 입력값이 출력에 많이 전달, 작으면 출력에 적게 전달

 

활성함수(Activation function)

- 분류의 경우 아웃풋 y는 0~1

- 활성화함수는 이 경우 가중합 v를 0~1 사이의 값으로 변환

- 여러 종류 존재

 

편향(bias)

- b < 0 인 경우, w1x1 + w2x2 > |b| 인 때

- b가 큰 값이면 활성화가 억제, 작은 값이면 활성화가 촉진

- b값에 따라 y의 값이 0또는 1에 치우친 값이 나오므로 편향이라 함

 

weight -> 각각의 입력 신호가 출력에 영향을 주는 정도를 조절

bias -> 뉴런이 얼마나 쉽게 활성화되는지를 조절

 

예시

φ(v) = 

- 0, if v <=  θ

- 1, if v > θ

w = 0.4, w2 = -0.1, w3 = 0.5, b = -0.5, θ = 0

v = wx^T + b

x1= 0.3, x2 = 0.1, x3 = 0.8 이면?

 

v = 0.4 * 0.3 + -0.1 * 0.1 + 0.5 * 0.8 - 0.5

= 0.12 - 0.01 + 0.4 - 0.5 = 0.01

φ(v) = 1

 

import numpy as np
def myNN(x):
  W = np.array([0.4, -0.1, 0.5])
  b = -0.5
  seta = 0
  v = np.sum(x * W) + b
  y = 1 if v>seta else 0
  return y

ds = np.array(
    [ [0.3,0.1,0.8],
      [0.5,0.6,0.3],
      [0.1,0.2,0.1],
      [0.8,0.7,0.7],
      [0.5,0.5,0.6]])

for i in range(5):
  print(myNN(ds[i,:]))

이렇게 됨

 

 

뉴럴 네트워크 설계

인풋 노드의 개수 = 피쳐의 개수

아웃풋 노드의 개수 = 클래스의 개수

 

일반적으로 입력과 가중치는 0~1 사이의 값

 

아웃풋 표현 방식

[0, 0, 1, 1]

[0, 1, 0, 1]

-> 여러 클래스에 속한다는 판정

 

[1, 0, 0, 0]

[0, 1, 0, 0]

[0, 0, 1, 0]

[0, 0, 0, 1]

-> one-hot 인코딩

 

심플 퍼셉트론의 한계

- 선형 분리 문제만 해결 가능

- XOR이 안됨

-> 다중 퍼셉트론