AI데이터엔지니어 부트캠프 <핀테커스> 11주차 - (2) 딥러닝 기초 - Artificial Neuron, Multilayer Perceptron

Lidit·2023년 11월 9일

Artificial Neuron

  • 생물학적인 뉴런을 수학적으로 모델링한 것
  • 주어진 입력에서 특정 패턴을 추출해내는 함수로 이해할 수 있다.
  • affine functionactivation function의 합성함수로 모델링

Artificial Neuron의 구성요소

  1. Weighted Sum
    • 가중치 w들을 각각의 feature x에 대해 곱하여 더하는 것을 의미

      z=w1x1+w2x2+...+wnxnz = {w_1x_1 +w_2x_2 + ... + w_nx_n}

  2. Affine Function
    • 계산된 Weighted Sum에 bias(b)를 더해주는 함수

      z=w1x1+w2x2+...+wnxn+b=WX+bz = {w_1x_1 +w_2x_2 + ... + w_nx_n + b} = W{\cdot}X + b

  3. Activation Function
    • 생체 신경세포의 시냅스 소포를 모방한 것
    • 들어오는 값이 일정치가 되었을 때, 그 값이 다음 뉴런으로 전달 되게 하는 역할을 수행함
      • ex) sigmoid function, ReLU function 등

sigmoid function

  • h(z)=11+ez=ezez+1h(z)=\displaystyle\frac{1}{1+e^{-z}}=\frac{e^z}{e^z+1}
  • 입력된 값을 0과 1 사이의 값으로 조정하여 반환
  • 절대값이 3 이상일때부터 크게 변하지 않는 특징이 있음

Multilayer Perceptron

출처: 양정은 T

  • 여기서, 각 neuron은 weight vector와 scalar bias를 가지고 있음
  • 한 레이어의 각 뉴런들의 weight vector를 합치면 weight matrix, scalar bias를 합치면 bias vector가 만들어짐
  • 레이어를 통과하면 행렬의 곱셈으로 출력을 정의할 수 있음

파이썬으로 표현하기

affine function

import numpy as np
class AffineFunction:
    def __init__(self, w, b):
        self.w = w
        self.b = b

    def forward(self, x):
        z = np.dot(self.w, x) + self.b

        return z

sigmoid function

class Sigmoid:
    def forward(self, z):
        a = 1 / (1 + np.exp(-z))

        return a

Artificial Neuron

class ArtificialNeuron:
    def __init__(self, w, b):
        self.affine = AffineFunction(w=w, b=b)
        self.sigmoid = Sigmoid()

    def forward(self, x):
        z = self.affine.forward(x)
        a = self.sigmoid.forward(z)

        return a

logic gate 뉴런을 레이어로 가지는 간단한 Model

class Model:
    def __init__(self):
        self.and_ = ArtificialNeuron(w=[0.5, 0.5], b=-0.7)
        self.or_ = ArtificialNeuron(w=[0.5, 0.5], b=-0.2)
        self.nand = ArtificialNeuron(w=[-0.5, -0.5], b=0.7)

    def forward(self, x):
        a1 = self.and_.forward(x)
        a2 = self.or_.forward(x)
        a3 = self.nand.forward(x)

        a = np.array([a1, a2, a3])
        return a

0개의 댓글