컴퓨터공학/인공지능

[인공지능] 4장. 신경망 기초2

NIMHO 2023. 4. 6. 15:00
728x90

복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.

4.4 퍼셉트론 학습 알고리즘

4.4.2 경사 하강법(gradient descent)의 원리

학습 알고리즘은 J의 최저점 w를 찾아야 한다.

 

학습 규칙 유도

- 경사 하강법은 미분을 이용해 최적해를 찾는 기법이다.

- 미분값 ∂J / ∂w1의 반대 방향이 최적해에 접근하는 방향이므로 현재 w1에 -∂J / ∂w1를 더하면 최적해에 가까워진다.

- 방향은 알지만 얼마만큼 가야 하는지에 대한 정보가 없기 때문에 학습률 p를 곱하여 조금씩 이동한다.

     - p는 하이퍼 매개변수로서 보통 0.001이나 0.0001처럼 작은 값을 사용한다.

 

매개변수가 여럿인 경우

- 편미분으로 구한 그레디언트(gradient)를 사용한다. (매개변수 별로 독립적으로 미분)

사실 경사 하강법 쪽 내용은 수업을 들었음에도 pdf내용이 잘 이해가 가지 않는다.

일단은 넘어가고 나중에 다시 공부할 때 수정해야겠다.

04장_신경망 기초_part2.pdf - page 10~13

728x90

4.5 현대 기계 학습으로 확장

4.5.1 현대적인 기계학습의 복잡도

분류 classification

- 지정된 몇 가지 부류로 구분하는 문제

 

문제 검출 object detection

- 물체 위치를 바운딩 박스(x, y, width, height)로 찾아내는 문제

- 사진 촬영에서 얼굴 초점 응용

 

영상 분할 image segmentation

- 영상을 화소 수준으로 분류하는 문제

- 의미적 분할 (semantic segmentation) : 화소의 카테고리만 구별

- 인스턴스 분할 (instance segmentation) : 추적 대상 물체를 화소 수준으로 각각 다르게 구별

 

적절한 손실 함수 필요

- 분류 : 참 값과 예측 값의 차이를 손실 함수에 반영

- 물체 검출 : 참 바운딩 박스와 예측한 바운딩 박스의 겹침 정도를 손실 함수에 반영

- 의미적 분할 : 화소 별로 참 값과 예측 값의 차이를 따지고 그 차이를 모두 합한 손실 함수

 

4.5.2 스토캐스틱(Stochastic) 경사 하강법

경사 하강법

- 자연과학과 공학에서 오랫동안 사용해 온 최적화 방법

- 전체 훈련 데이터셋을 이용해 gradient를 계산한다.

     - 모든 데이터를 한 번에 메모리에 올려야 하기에 시간, 메모리의 한계로 하기 힘들다.

     - 하지만 누가, 어디서, 언제 하든 값이 동일하다.

 

기계 학습의 경사 하강법

- 여러 측면에서 표준 경사 하강법과 다르다.

     - 잡음이 섞인 데이터가 개입한다.

     - 매개변수가 방대하다.

     - 일반화 능력 필요하다.

 

     <- 이런 특성은 최적해를 찾는 일을 어렵게 만든다.

     <- 정확률이 등락을 거듭하며 수렴하지 않는다거나 훈련 집합에 대해 높은 성능을 얻었는데 테스트 집합에 대해 형편없는 성능 등의 문제

 

기계 학습은 스토캐스틱 경사 하강법으로 확장하여 사용

- 배치 모드 vs. 패턴 모드

     - 배치 모드 : 틀린 샘플을 모은 다음 한꺼번에 매개변수 갱신한다.

     - 패턴 모드 : 훈련 데이터셋의 각 샘플을 개별적으로 사용하여 모델을 학습한다.

          - 각 샘플에 대해 오차를 계산하고 가중치를 즉시 업데이트한다.

 

딥러닝은 주로 미니 배치 사용(패턴 모드와 배치 모드의 중간)

- 훈련 집합을 일정한 크기의 부분 집합으로 나눈 다음 부분 집합 별로 처리한다.

- 부분 집합으로 나눌 때 랜덤 샘플링을 적용하는 경우, 스토캐스틱 경사 하강법(SGD)이라 부른다.

 

스토캐스틱 경사 하강법 (Stochastic Gradient Descent, SGD)

- 훈련 집합에서 한 개의 샘플을 random 하게 뽑아 gradient를 계산하고 parameter를 업데이트한다.

     - 반복해서 전체의 샘플을 다 돌린다. (memory 절략, but 시간이 오래 걸림)

- 미니배치 경사 하강법(minibatch gradient descent)

     - 훈련 집합을 일정한 크기의 부분 집합으로 나눈 다음 부분 집합 별로 처리한다.

          - 부분 집합으로 나눌 때 ramdom sampling을 적용해 학습데이터 분포를 따르게 한다.

 

- Tensorflow와 Pytorch의 SGD함수는 gradient / SGD / mnibatch gradient descent를 모두 표현 가능하다.

 

Minibatch Gradient Descent의 주요 단계

1. model의 weight를 초기화

2. 데이터의 작은 부분 집합을 randomly select (minibatch라 부른다.)

3. 선택한 minibatch를 이용해 loss function의 모든 parameter에 대한 gradient를 계산

4. parameter를 계산된 gradient와 주어진 learning rate를 이용해 update

5. 단계 2-4를 종료 조건(학습 횟수, loss function의 최소 향성 정도 등)을 만족할 때까지 반

4.6 퍼셉트론 프로그래밍

4.6.1 OR 데이터 인식

from sklearn.linear_model import Perceptron as pc

# training set
x = [[0, 0], [0, 1], [1, 0], [1, 1]]
y = [-1, 1, 1, 1]

# fit 함수로 perceptron 학습
p = pc()
p.fit(x, y)

print(p.coef_, p.intercept_)
print(p.predict(x))
print(p.score(x, y) * 100, '%')

 

4.6.2 필기 숫자 데이터 인식

sklearn이 제공하는 숫자 데이터에 퍼셉트론을 적용한다.

- SVM을 사용한 것과 비슷하다.

from sklearn import datasets
from sklearn.linear_model import Perceptron as pc
from sklearn.model_selection import train_test_split as tts
import numpy as np

# 데이터셋을 읽고 훈련, 테스트로 분할
digit = datasets.load_digits()
x_train, x_test, y_train, y_test = tts(digit.data, digit.target, test_size=0.6)

# fit 함수로 Perceptron 학습
p = pc(max_iter=100, eta0=0.001, verbose=0)
p.fit(x_train, y_train)

res = p.predict(x_test)

# 혼동 행렬
conf = np.zeros((10, 10))
for i in range(len(res)):
    conf[res[i]][y_test[i]] += 1
print(conf)

# 정확률
num_correct = 0
for i in range(10):
    num_correct += conf[i][i]
accuracy = num_correct / len(res)
print(accuracy * 100, "%")

실행 결과 93.88% 정확률

- SVM 모델의 98.74%보다 열등하다. (퍼셉트론은 선형 분류기이기 때문이다.)

 

4.6.3 기계 학습의 디자인 패턴

물건에 깃든 패턴

- ex) 달구지, 마차, 자동차, 자율 주행차 모두 둥근 모양의 바퀴를 사용한다.

- 바퀴의 재발명(reinventing the wheel)을 피하려면 패턴을 잘 활용해야 한다.

 

컴퓨터 프로그램에 깃든 패턴

- 『Design Patterns: Elements of Reusable Object-oriented Software』은 소프트웨어의 디자인 패턴의 중요성을 강조

- ex) 리스트에서 최솟값, 최댓값 찾기, 평균 구하기는 모두 리스트를 순차적으로 훑는 연산 필요하다.

    → Iterator라는 디자인 패턴

 

기계 학습에 깃든 패턴

- 모델만 달라지고 나머지는 같은 경우가 많다.

- 기계 학습의 디자인 패턴

     - 데이터 읽기 → 모델 객체 생성 → 모델 학습(train set + validation set) → 예측(test set) → 성능 평가

- 디자인 패턴의 계층 구조

     - 하위 작업에도 디자인 패턴이 존재한다. ex) 혼동 행렬 구하기

728x90