inblog logo
|
devleekangho
    딥러닝

    다층 퍼셉트론 (MLP)

    KangHo Lee's avatar
    KangHo Lee
    Jun 19, 2025
    다층 퍼셉트론 (MLP)
    Contents
    다층 퍼셉트론(MLP, Multi-Layer Perceptron): 딥러닝의 기초를 이해하다1. 퍼셉트론이란 무엇인가?2. 다층 퍼셉트론의 등장3. MLP는 어떻게 학습하는가?4. 활성화 함수의 중요성5. MLP 구현 시 고려사항6. tensorflow로 구현

    다층 퍼셉트론(MLP, Multi-Layer Perceptron): 딥러닝의 기초를 이해하다

    • 인공지능과 머신러닝이 우리 일상 깊숙이 들어온 지금, 그 핵심 기술 중 하나인 다층 퍼셉트론(Multi-Layer Perceptron, MLP)에 대해 알아보겠습니다.
    • 복잡해 보이는 이름이지만, 사실 MLP는 현재 우리가 사용하는 대부분의 AI 시스템의 기반이 되는 매우 중요한 개념입니다.

    1. 퍼셉트론이란 무엇인가?

    • 다층 퍼셉트론을 이해하기 전에, 먼저 퍼셉트론(Perceptron)이 무엇인지 알아야 합니다. 퍼셉트론은 1950년대 프랭크 로젠블라트가 개발한 최초의 인공 신경망 모델입니다.
    • 간단히 말해, 퍼셉트론은 인간의 뉴런을 모방한 수학적 모델입니다. 여러 입력값을 받아서 가중치를 곱하고, 모든 값을 더한 후 특정 임계값을 넘으면 활성화되는 구조입니다.

    단층 퍼셉트론의 한계

    • 하지만 단일 퍼셉트론은 심각한 한계가 있었습니다. 바로 선형 분리 가능한 문제만 해결할 수 있다는 점입니다.
    • 예를 들어, XOR 문제처럼 선으로 나눌 수 없는 복잡한 패턴은 학습할 수 없었죠.

    2. 다층 퍼셉트론의 등장

    • 이런 한계를 극복하기 위해 등장한 것이 바로 다층 퍼셉트론(MLP)입니다.
    • MLP는 여러 개의 퍼셉트론 층을 쌓아 올린 구조로, 복잡한 비선형 문제도 해결할 수 있게 되었습니다.

    MLP의 기본 구조

    MLP는 크게 세 부분으로 구성됩니다.
    notion image
    1. 입력층(Input Layer)
    • 데이터가 들어오는 첫 번째 층
    • 각 노드는 입력 특성 하나를 담당
    2. 은닉층(Hidden Layer)
    • 입력층과 출력층 사이의 중간 층들
    • 실제 학습과 패턴 인식이 일어나는 핵심 부분
    • 여러 개의 은닉층을 가질 수 있음
    3. 출력층(Output Layer)
    • 최종 결과를 출력하는 층
    • 분류 문제면 클래스 개수만큼, 회귀 문제면 보통 1개의 노드

    3. MLP는 어떻게 학습하는가?

    • MLP의 학습 과정은 역전파(Backpropagation) 알고리즘을 통해 이루어집니다.
    • 이는 1980년대에 개발되어 현재까지도 널리 사용되는 핵심 기술입니다.

    순전파(Forward Propagation)

    1. 입력 데이터가 네트워크를 통해 앞으로 전달됩니다
    1. 각 층에서 가중치와 편향을 적용하여 계산합니다
    1. 활성화 함수를 통과시켜 다음 층으로 전달합니다
    1. 최종적으로 출력층에서 예측값을 생성합니다

    역전파(Backpropagation)

    1. 실제값과 예측값의 오차를 계산합니다
    1. 이 오차를 출력층부터 입력층까지 거꾸로 전파합니다
    1. 각 가중치가 오차에 미친 영향을 계산합니다
    1. 경사하강법을 사용하여 가중치를 업데이트합니다

    4. 활성화 함수의 중요성

    • MLP에서 활성화 함수(Activation Function)는 매우 중요한 역할을 합니다.
    • 활성화 함수가 없다면 아무리 많은 층을 쌓아도 결국 선형 변환의 조합일 뿐이기 때문입니다.

    주요 활성화 함수들

    ReLU (Rectified Linear Unit)
    • 현재 가장 널리 사용되는 활성화 함수
    • 음수는 0으로, 양수는 그대로 출력
    • 계산이 간단하고 기울기 소실 문제를 완화
    Sigmoid
    • 0과 1 사이의 값으로 출력을 제한
    • 이진 분류 문제의 출력층에서 주로 사용
    • 기울기 소실 문제가 있어 깊은 네트워크에서는 잘 사용하지 않음
    Tanh
    • 1과 1 사이의 값으로 출력
    • Sigmoid보다 좋은 성능을 보이지만 여전히 기울기 소실 문제 존재

    5. MLP 구현 시 고려사항

    하이퍼파라미터 튜닝

    • 층의 개수: 너무 적으면 복잡한 패턴을 학습하지 못하고, 너무 많으면 과적합 위험
    • 노드 수: 각 층의 노드 수는 문제의 복잡성과 데이터 크기를 고려하여 결정
    • 학습률: 너무 크면 수렴하지 못하고, 너무 작으면 학습이 매우 느림

    정규화 기법

    드롭아웃(Dropout)
    • 학습 중 일부 노드를 무작위로 비활성화
    • 과적합을 방지하는 효과적인 방법
    배치 정규화(Batch Normalization)
    • 각 층의 입력을 정규화하여 학습 안정성 향상
    • 더 높은 학습률 사용 가능

    6. tensorflow로 구현

    from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense import pandas as pd # 데이터셋을 불러옵니다. df = pd.read_csv('./data/dataset.csv') # 세부 정보를 X로 지정합니다. X = df.iloc[:,0:8] # 출력값을 y로 지정합니다. y = df.iloc[:,8] # 모델을 설정합니다. model = Sequential() model.add(Dense(12, input_dim=8, activation='relu', name='Dense_1')) model.add(Dense(8, activation='relu', name='Dense_2')) model.add(Dense(1, activation='sigmoid',name='Dense_3')) model.summary() # 모델을 컴파일합니다. model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 모델을 실행합니다. history=model.fit(X, y, epochs=100, batch_size=5)

    활성화 함수

    • 은닉층 1, 2 모두 렐루 함수(은닉층 1층은 출력층을 겸함)
    • 0과 1로 이루어진 데이터 이므로 출력층은 시그모이드 함수 사용

    손실 함수

    • 출력층이 0과 1로 나오므로 교차 엔트로피 오차를 활용

    옵티마이저

    • 경사하강법을 발전시켜 나온 아담 알고리즘 사용
    Share article
    Contents
    다층 퍼셉트론(MLP, Multi-Layer Perceptron): 딥러닝의 기초를 이해하다1. 퍼셉트론이란 무엇인가?2. 다층 퍼셉트론의 등장3. MLP는 어떻게 학습하는가?4. 활성화 함수의 중요성5. MLP 구현 시 고려사항6. tensorflow로 구현

    devleekangho

    RSS·Powered by Inblog