220v
젝무의 개발새발
220v
전체 방문자
오늘
어제
  • 분류 전체보기 (255)
    • AI (35)
      • ML, DL 학습 (30)
      • 논문 리뷰 (4)
      • 실습 및 프로젝트 (1)
    • Algorithm (145)
      • LeetCode (13)
      • 프로그래머스 (35)
      • 백준 (96)
      • 알고리즘, 문법 정리 (1)
    • Mobile, Application (17)
      • Flutter (10)
      • iOS, MacOS (7)
    • BackEnd (7)
      • Flask (1)
      • Node.js (5)
      • Spring, JSP..etc (1)
    • Web - FrontEnd (18)
      • JavaScript, JQuery, HTML, C.. (12)
      • React (6)
    • DataBase (1)
      • MySQL (1)
      • Firebase Firestore (0)
      • Supabase (0)
    • Git (1)
    • 기타 툴 및 오류 해결 (3)
    • 강의 (5)
      • Database (3)
      • 암호학 (2)
      • 알고리즘 (0)
    • 후기와 회고 (2)
    • 블로그 꾸미기 (1)
    • 일상과 이것저것 (20)
      • 맛집 (12)
      • 세상사는일 (4)
      • 도서리뷰 (1)
      • 이런저런 생각들 (잡글) (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dp
  • simulation
  • IMPLEMENT
  • bitmasking
  • Minimum Spanning Tree
  • 위상 정렬
  • REACT
  • 오블완
  • top-down
  • Prefix Sum
  • 다익스트라
  • two pointer
  • 프로그래머스
  • brute-Force
  • Mathematics
  • Greedy
  • dfs
  • implementation
  • union-find
  • Dynamic Programming
  • 티스토리챌린지
  • Lis
  • Backtracking
  • topological sort
  • Priority Queue
  • 백준
  • 구현
  • binary search
  • BFS
  • disjoint set

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
220v

젝무의 개발새발

AI/ML, DL 학습

[ML/DL 스터디] <ANN - 1> Artificial Neural Network (ANN) - 1

2024. 11. 7. 20:05

Reference

https://iai.postech.ac.kr/teaching/machine-learning
https://iai.postech.ac.kr/teaching/deep-learning
위 링크의 강의 내용에 기반하여 중요하거나 이해가 어려웠던 부분들을 정리하여 작성하였고,
모든 강의 슬라이드의 인용은 저작권자의 허가를 받았습니다.

또한, 모든 내용은 아래 Notion에서 더 편하게 확인하실 수 있습니다.
>>노션 링크<<

 

Keywords

  • Perceptron, Neuron
  • XOR Problem
  • Multi-Layer Perceptron(MLP)
  • Aritificial Neural Network(ANN)
  • Activation Function, Sigmoid

 

From Perceptron to MLP

Binary Linear Classifier인 Perceptron을 통해,

주어진 dataset에 대해 학습하여, 주어진 공간(data feature 개수 n에 대한 n-dimensional space)을 둘로 나누는 hyperplane을 설정하는 weight을 알아낼 수 있었다.

또한 이렇게 결정된 model인 perceptron을 통해, new data에 대하여 forward propagation을 수행 (perceptron에 data를 넣어 계산)하여 new data가 어떤 class에 해당되는 지 classification을 수행할 수 있는 것을 앞에서 학습하였다.

다시 한 번 정리하자면, 여기까지의 Perceptron이란:
주어진 input space(m-dimensional space)상에서 두 class를 구별하는 단 하나의 linear classifier(hyperplane)를 define하는 것.

 

앞에서 학습하였던 Binary Linear Classification에서의 Perceptron은
sign function을 이용했지만, (output: -1 or 1)
여기서는 step function (계단함수, output: 0 or 1)을 이용한다.
(당연히, step function은 미분불가능하다.)

 

Neuron(Perceptron)은 input의 weighted sum을 계산하고, 그 합이 양수이면 activate, 음수이면 deactivate시키는 기본 단위임.

(오른쪽의 식을 보면 쉽게 이해할 수 있다. weighted sum인 $a = \omega_0+\omega_1x_1+\omega_2x_2$ 를 계산 후, 이를 step function인 $g(a)$에 대입하여 $a$가 양수이면 1, 음수이면 0을 output으로 내놓는다.)

neuron은 NN에서 사용되는 가장 기본 단위이고, activation function으로 step function 이외의 다른 함수도 사용할 수 있는 일반적인 개념이지만, 여기까지는 perceptron의 또 다른 형태로 서술한다.

이러한 하나의 perceptron(neuron)으로는 **하나의 hyperplane(binary linear classifier)밖에 generate할 수 없기 때문에**, 이것만으로는 부족하다. **다른 무언가가 필요함!** ⇒ 이것이 MLP가 필요한 motivation이다.

 

XOR Problem

이와 관련하여, XOR Problem이라는 것이 존재한다.

Single neuron으로는 하나의 linear classification boundary만을 generate할 수 있기 때문에,

AND, OR 연산에 대한 boundary는 형성할 수 있지만, XOR 연산에 대한 boundary는 single neuron을 통해 형성할 수 없는 문제가 있다. (그림을 보면, 초록색 점과 빨간색 점을 하나의 선형 구분선으로 구분할 수 없다는 것은 시각적으로 빠르게 받아들일 수 있을 것이다.)

따라서, 이러한 문제를 해결하기 위해서는?
→ non-linear classification boundary를 만들거나, linear classification boundary를 2개 이상 만들어야 할 것이다.

(다음부터 나올 MLP는, linear boundary를 여러 개 만들어서 이러한 문제를 해결하는 방식이다.)

 

MLP

위에서의 그러한 문제 (XOR Problem 등)를 해결하기 위하여, neuron을 여러 개 사용할 수 있다.

왼쪽의 그림과 같이 각각의 neuron을 학습하게 되면, neuron의 개수만큼(여기서는 2개)의 직선(boundary)가 형성되게 될 것이고, 이를 통해 Linearly Classify되지 않는(non-linearly distribute된 data에 대한) 여러 문제들을 해결할 수 있게 된다. 이것이 MLP이다.

(결국 input은 동일하므로, 오른쪽과 같은 형태로 합칠 수 있음도 쉽게 받아들일 수 있을 것이다.)

 

Activation Function

앞에서까지는 weighted sum의 값에 의해 output을 결정하는 함수를 step function(계단함수)을 이용했다.

이렇게 weighted sum이 계산된 이후, 이 값에 따라 neuron의 activate 여부를 결정하는 함수를 activation function이라 한다.

Step Function을 이러한 Activation Function으로 사용했을 때의 단점은, 함수가 non-differentiable하다는 것이다. (미분불가능)

추후 weight를 수정해 나가는 학습(train, fit)과정에서, 미분 연산이 필요하게 되는데, step function은 미분불가능하기 때문에- activation function을 미분가능한 함수로 변경해야 할 필요가 있다.

그렇기 때문에, 여기서는 step function을 미분 가능한 sigmoid function으로 대체한다.

Logistic Regression 두 개가 연결되어 있는 상태라고 생각하면 된다. 추후 weight를 update하는 과정에서 Gradient Descent를 이용할 때, non-differentiable한 function이 존재한다면 gradient를 계산할 수 없는 문제가 생기기 때문.

    'AI/ML, DL 학습' 카테고리의 다른 글
    • [ML/DL 스터디] <ANN - 3> Training ANN, Backpropagation
    • [ML/DL 스터디] <ANN - 2> Artificial Neural Network (ANN) - 2
    • [ML/DL 스터디] <Dim. Reduction> Principal Component Analysis (PCA)
    • [ML/DL 스터디] <Classification - 3> Logisitic Regression, Kernel
    220v
    220v
    DGU CSE 20 / Apple Developer Academy @ POSTECH 2nd Jr.Learner.

    티스토리툴바