실용 자연어처리 Ch.6

송종빈·2023년 4월 22일
0

23-1

목록 보기
15/31

딥러닝 기초

기초 수학

일차 함수, 기울기와 y 절편

일차 함수

y=ax+b  (a0)y = ax + b\; (a \neq 0)

aa: 기울기
bb: 절편

이차함수와 최솟값

이차 함수

y=ax2+bx+c  (a0)y = ax^2 + bx + c\; (a \neq 0)

a>0a > 0 이면 아래로 볼록
a<0a < 0 이면 위로 볼록

y=ax2y = ax^2의 그래프 평행이동

  • x축으로 p만큼, y축으로 q만큼 평행이동
    y=a(xp)2+q  (a0)y = a (x-p)^2 + q\; (a \neq 0)
  • 점 p와 q를 꼭짓점으로 하는 포물선
  • 꼭짓점은 이차함수의 최솟값이 됨

미분, 순간 변화율과 기울기

미분

  • 어떤 함수의 정의역 속 각 점에서 함수값의 변화량과 독립 변수값의 변화량 비의 극한
  • 입력 변수의 변화가 함수 출력 값을 변화시키는 정도를 나타냄
  • 함수의 기울기

딥러닝을 이해하는데 중요한 개념

  • 딥러닝은 일차함수의 a(가중치)와 b(편향) 값을 구하는 것
  • a와 b의 값은 이차함수 포물선의 최솟값을 구하는 것과 동일
  • 최솟값을 미분으로 구하기 때문에 중요
    • 순간 변화율을 통해 최솟값을 구함

미분

  • 순간 변화율 (=미분계수)
    • 어느 한 점에서의 접선의 기울기
    • 기울기가 0인 접선

편미분

  • 여러가지 변수가 식 안에 있을때, 모든 변수를 미분하는 것이 아니라 우리가 원하는 한가지 변수만 미분하고 그 외에는 모두 상수 취급
  • 파라미터들은 보통 여러 차원으로 이루어진 벡터 형태여서 여러 변수를 고려하는 상황이라 편미분 필요

인공신경망

뉴럴 네트워크의 개념

뉴럴 네트워크

  • 딥러닝의 핵심
  • 인공신경망이라고도 불림

퍼셉트론

  • 가장 간단한 인공 신경망 구조 중 하나
  • 입력과 출력이 숫자, 각각의 입력 연결은 가중치와 연관되어 있음
  • 입력의 가중치 합을 계산한 다음, 계산된 합에 계단 함수를 적용해 결과 출력

  • 입력뉴런: 퍼셉트론의 입력으로 어떤 입력이 주입되든 출력으로 통과시킴
    • 입력층: 모두 입력 뉴런으로 구성된 층
  • 편향 뉴런: 편향(bias) 특성을 더해주기 위해 사용됨
    • 편향은 퍼셉트론의 활성화 정도를 조절할 수 있음
  • 출력 뉴런: 출력을 결정하는 뉴런

퍼셉트론의 학습

  • 개념: 뉴런이 다른 뉴런을 활성화시킬때, 두 뉴런의 연결이 더 강해짐
  • 네트워크가 예측할때 만드는 오차를 반영하도록 훈련됨
  • 잘못된 예측을 하는 모든 출력 뉴런에 대해 올바른 예측을 만들도록 연결(가중치)를 강화

퍼셉트론의 한계

  • 논리 게이트 표현
    • 퍼셉트론은 XOR 연산문제를 풀 수 없는 한계가 있었음

퍼셉트론의 한계 극복

  • 평면을 휘어주어 XOR 문제 극복
    • 퍼셉트론 2개를 한번에 계산
    • 퍼셉트론 2개를 각각 처리하는 은닉층을 만듦
      • 다층 퍼셉트론

다층 퍼셉트론의 개념

  • 퍼셉트론을 여러개 쌓아올린 형태
  • 입력층, 은닉층, 출력층으로 구성됨
  • 피드포워드 신경망 (FeedForward Neural Network)의 한 종류
    • 입력층에서 출력층으로 신호가 한 방향으로만 전달되는 구조
    • 이 구조때문에 역전파를 통해 네트워크 학습
  • 심층 신경망 (DNN)
    • 은닉층을 여러개 쌓아올린 신경망

단순한 형태의 다층 퍼셉트론 예제

(참고) 시그모이드 함수

  1. 입력값을 0과 1 사이의 값으로 압축시키는 비선형 함수
  2. 미분 가능한 함수

Summary

  1. 퍼셉트론의 개념

  2. 퍼셉트론의 한계

  • XOR 문제
  1. 퍼셉트론의 한계 극복
  • 다층 퍼셉트론
  1. 다층 퍼셉트론의 개념

오차 역전파 알고리즘

다층 퍼셉트론의 학습

역전파

  • 신경망이 예측한 결과와 실제 결과 사이의 오차를 신경망에 역으로 전파
    • 오차를 역으로 전파하기 위해 경사하강법 사용
  • 순전파 (forward process) & 역전파 (backward process) 두 단계로 구성

(참고) 경사하강법

경사하강법

  • 최적의 해법 (원하는 값)을 찾는 알고리즘
  • 아이디어: 비용함수를 최소화하기 위해 반복해서 파라미터를 조정해가는 것
  • 파라미터 벡터 θ\theta 에 대해 비용함수의 기울기가 감소하는 방향으로 진행
  • 순간 기울기가 0인 점이 곧 우리가 찾는 비용의 최솟값

경사하강법의 과정

  1. a1에서 미분을 구함
  2. 구한 기울기의 반대 방향 (기울기가 +면 음의 방향 / 기울기가 -면 양의 방향)으로 어느정도 이동시킨 a2에서 미분을 구함
  3. 앞에서 구한 미분 값이 0이 아니면 1 & 2 과정을 반복

학습률 (Learning Rate)

  • 과정 2에서 어느정도 이동할 것인지 결정하는 변수
  • 학습률이 크면 많이 이동하고, 학습률이 작으면 적게 이동

순전파와 역전파

  1. 순전파
    1. 입력 데이터는 네트워크 입력층으로 전달되어 첫번째 은닉층으로 보내짐
    2. 해당 층에 있는 모든 뉴런의 출력을 계산하고 결과를 다음 층에 전달
    3. 2의 단계를 마지막 출력층의 출력을 계산할때까지 반복
  2. 출력층의 결과와 정답 간의 오차를 계산
  3. 역전파
    1. 계산된 오차에 각 출력 연결이 기여하는 정도를 계산
    2. 연쇄법칙을 적용하여 이전 층의 가중치가 오차에 기여하는 정도 계산
    3. 2의 방법을 반복하여 입력층까지의 오차 그래디언트 계산
  4. 경사하강법을 사용하여 오차 그레디언트를 이용해서 네트워크의 가중치를 수정

오차 계산하기

  • 계산 방법: 손실함수를 사용해 정답과 예측간의 오차 계산 & 가중치 변경
  • 미세 조정 (fine tuning)
    • 네트워크의 파라미터 (가중치)의 값을 변경하는 과정

대표적인 손실 함수

  • 선형 회귀의 경우
    • 평균 제곱 오차 손실 (MSE; Means Squared Error Loss)
  • 로지스틱 회귀의 경우
    • 교차 엔트로피 손실 (Cross-Entropy Loss)

(참고) 오차 계산하기

평균 제곱 오차 손실 (MSE Loss)

  • 예측한 값과 실제 값 사이의 평균 제곱 오차
  • 데이터가 예측으로부터 얼마나 퍼져있는지를 나타낸 손실 함수

교차 엔트로피 손실 (Cross-Entropy Loss)

  • 예측한 확률 분포와 실제 분포 사이의 차이를 최소화하려는 목적을 가진 손실함수

Cross Entopy란?

  • 예측분포가 실제 분포에 대해 얼마나 잘 맞는지 측정
  • Pytorch에서의 Cross Entropy 종류
    • BCELoss()
      • 이진분류 문제에서 사용되는 손실함수
    • CrossEntropyLoss()
      • 다중분류 문제에서 사용되는 손실함수

BCELoss()

  • 이진 분류 문제의 손실을 구할때만 사용
  • 출력 레이어에서 하나의 뉴런을 사용하고 sigmoid 함수를 활성화 함수로 사용

CrossEntropyLoss()

  • 다중 분류 문제의 손실을 구할때 사용
  • 출력 레이어에서 각 클래스마다 하나의 뉴런을 사용하고 softmax 함수를 활성화 함수로 사용

(참고) 소프트맥스 함수

  • 다중 클래스 분류 문제에 자주 사용되는 함수
    • 각 클래스에 대한 예측 확률을 계산하는데 사용
  • 출력층의 각 뉴런에 대한 입력값을 0과 1사이로 변환하고, 이들 값의 합이 1이 되도록 정규화
    • 해당 값이 클래스의 예측 확률로 사용됨

Summary

  • 다층 퍼셉트론의 학습

    • 역전파 알고리즘
      • 순전파 & 역전파
    • 오차 계산 방법
    • 소프트맥스 활성화 함수
  • 다층 퍼셉트론의 학습과정 요약

    1. 정방향 계산
      • 각 훈련 샘플에 대해 역전파 알고리즘이 먼저 예측을 만들고 오차를 측정
    2. 역방향 계산
      • 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도를 측정
    3. 경사하강법 적용
      • 오차가 감소하도록 가중치 조정
profile
Student Dev - Language Tech & Machine Learning

0개의 댓글