| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Position
- g검정
- 반응형 웹 프로젝트
- Codility
- 메서드
- css 기초
- 미디어쿼리
- 퍼셉트론
- html 기초
- 파이썬
- GridLayout
- CSS
- rnn
- Database
- inline
- FileWriter
- 상속
- oracle
- HTML
- 사전학습
- 예제
- ObjectOutputStream
- java
- FlowLayout
- iframe 태그
- html 프로젝트
- 반응형웹
- BorderLayout
- 푸리에 변환
- FFT
- Today
- Total
도라에몽주머니
[ML] 다층 퍼셉트론(Multi-Layer Perceptron)과 활성화 함수 본문
지난 게시물에서는 단층 퍼셉트론의 한계에 대해 이야기 했었다.
단층 퍼셉트론의 개념과 한계가 무엇인지 모르겠다면 아래 글을 참고하면 좋을 것 같다.
[Study/ML] - [ML] 퍼셉트론(Perceptron) 이란?
[ML] 퍼셉트론(Perceptron) 이란?
이미지 기반 머신러닝을 복습하던 중, 퍼셉트론이라는 개념을 정확히 정리하고 넘어가는 것이 좋다고 생각해 퍼셉트론의 개념 및 종류 등에 관해 정리해보려 한다. 퍼셉트론 기초 개념 퍼셉트
geniemon0104.tistory.com
지난 글에서도 설명했듯이, 단층 퍼셉트론의 한계로 이야기된 XOR 게이트를 구현하는 방법으로는 단층 퍼셉트론을 병렬적으로 연결해 다층 퍼셉트론을 구성하는 것이다.
그렇다면 다층 퍼셉트론이란 정확히 무엇일까?
다층 퍼셉트론 (Multi-Layer Perceptron)
입력층과 출력층으로 이루어진 단층 퍼셉트론을 조합하여 여러개의 층으로 구성된 퍼셉트론을 다층 퍼셉트론(Multi-Layer Perceptron) 이라고 한다.
다층 퍼셉트론은 입력층과 출력층 사이에 은닉층(Hidden Layer) 이 추가되어 있다. 은닉층은 2개 이상의 층(Layer) 으로 구성되고 이렇게 은닉층이 쌓임으로써 선형적으로 풀 수 없던 문제들을 해결할 수 있게 된다.

은닉층이 추가되면 어떠한 효과를 가져오는지 알아보자.
은닉층을 추가하면 다음 그림과 같이 좌표 평면을 왜곡하게 된다. 주어진 좌표 평면 그대로 선형의 선만 그어 문제를 해결했던 단층 퍼셉트론과는 달리, 좌표 평면을 왜곡해줌으로써 비선형적으로 문제를 해결할 수 있게 된다.

XOR 게이트의 구현
지난 단층 퍼셉트론의 한계점으로 제시되었던 XOR 게이트는 다층 퍼셉트론을 활용해 AND, NAND, OR 게이트를 조합하면 해결할 수 있다.



NAND Gate와 OR Gate를 병렬적으로 연결하고, 두 게이트의 출력을 AND Gate에 통과시키면 XOR Gate를 구현할 수 있다.


활성화 함수 (Activation Function)
활성화 함수는 이전 층의 결과값을 변환하여 다른 층의 뉴런으로 신호를 전달할지 말지 결정하는 함수이다.
활성화 함수의 목적
활성화 함수의 목적에 대해 알아보기 전에, 다층 퍼셉트론을 만드는 것을 생각해보자.
다층 퍼셉트론을 만들기 위해 무작정 Linear Layer 만 쌓는다고 다층 퍼셉트론이 비선형 분류기로 변환될 수 있을까?
선형 분류기는 f(ax+by)=af(x) + bf(y) 의 성질 때문에 아무리 여러개의 Linear Layer 를 쌓더라도 하나의 선형 연산으로 나타내어질 수 있다. 즉, 다층 퍼셉트론에서는 Linear Layer를 여러개 쌓는 것이 아닌, Non-linear Layer를 여러 층으로 쌓아야 한다.
(Linear Layer를 여러개 쌓으면 결국 하나의 선형 연산으로 표현되기 때문)
그렇기 때문에 Linear Layer 를 Non-linear Layer 의 형태로 만들어 주어야 한다. 이러한 변환을 위해, 활성화 함수(Activation Function) 가 활용된다.
활성화 함수의 종류
활성화 함수는 Sigmoid, tanh, ReLU 등 여러 종류가 있는데, 이 글에서는 간단히 Sigmoid와 ReLU에 대해서만 다루어 볼 예정이다.

시그모이드 함수 (Sigmoid Function)
시그모이드 함수는 output 값을 0~1 사이의 값으로 만들어주는 비선형 함수이다. 이 함수는 출력이 연속적으로 변화하며, 입력값이 아무리 작거나 아무리 크더라도 항상 0과 1 사이의 실수값을 출력한다는 특징이 있다.

ReLU 함수
ReLU 함수는 입력이 0을 넘으면 입력을 그대로 출력하고, 0 이하면 0을 출력하는 비선형 함수이다. 다른 활성화 함수들에 비해 학습이 빠르다는 장점이 있지만, 입력값이 음수인 경우 기울기가 0이 되어 가중치 업데이트가 되지 않을 수 있다.

Python 코드 구현 (XOR)
마지막으로 XOR을 Python을 활용해 구현해볼 것이다.
XOR Gate 를 구현하기 위해서는 우선 AND, NAND, OR Gate를 구현해야 한다.
가중치와 편차는 지난 게시글을 참고해서 작성했다.
# AND Gate
def AND(x1, x2):
x=np.array([x1, x2]) # input
w=np.array([0.5, 0.5]) # weight
b=-0.8 # bias
tmp=np.sum(w*x)+b
if tmp>0:
return 1
else:
return 0
# NAND Gate
def NAND(x1, x2):
x=np.array([x1, x2]) # input
w=np.array([-0.5, -0.5]) # weight
b=0.7 # bias
tmp=np.sum(w*x)+b
if tmp>0:
return 1
else:
return 0
# OR Gate
def OR(x1, x2):
x=np.array([x1, x2]) # input
w=np.array([0.5, 0.5]) # weight
b=-0.2 # bias
tmp=np.sum(w*x)+b
if tmp>0:
return 1
else:
return 0
XOR 게이트는 NAND, OR 게이트를 통과한 값을 입력으로하는 AND 게이트를 통해 만들 수 있다.
def XOR(x1, x2):
s1=NAND(x1, x2)
s2=OR(x1, x2)
y=AND(s1, s2)
return y
아래의 코드를 실행해 결과를 확인해보면 XOR Gate가 잘 구현되었음을 알 수 있다.
print(XOR(0, 0)) # 0
print(XOR(0, 1)) # 1
print(XOR(1, 0)) # 1
print(XOR(1, 1)) # 0'Study > ML' 카테고리의 다른 글
| [ML] 하이퍼파라미터 최적화(Random Search, Grid Search) (0) | 2024.12.22 |
|---|---|
| [ML] numpy 모듈으로 푸리에 변환 구현 (4) | 2024.09.27 |
| [ML] 푸리에 변환(Fourier Transform) 이란? (3) | 2024.09.17 |
| [ML] 퍼셉트론(Perceptron) 이란? (0) | 2023.11.02 |
| 0. 붓꽃 데이터 분석(Iris Dataset; KNN) (0) | 2023.10.23 |