Deep Learning/Natural Language Processing

[pytorch] Feed-forward network

frances._.sb 2022. 7. 25. 15:44
728x90

퍼셉트론은 데이터에서 복잡한 패턴을 학습할 수 없다는 단점이 있다. 

배타적 논리합(XOR)에 해당하는 데이터 셋을 퍼셉트론은 학습하지 못한다.

 

 

  •  MLP (MultiLayer Perceptron)

- 간단한 퍼셉트론을 구조적으로 확장한 신경망

 

  • CNN (Convolutional Neural Network)

- 디지털 신호 처리에 사용하는 윈도 필터에 영향을 받아 만든 신경망

- 윈도 특성 덕분에 입력에 있는 국부 패턴을 학습할 수 있다.

- 컴퓨터 비전에 아주 적합하고 단어나 문장 같으느 순차 데이터에서 부분 구조를 감지하는 데도 이상적이다.

 

 

크게 위의 두 가지를 소개하고 예제도 함께 보겠다.

 

 

1. 다층 퍼셉트론 (MLP)

 

- MLP는 많은 퍼셉트론이 모여 있으므로 층의 출력은 출력값 하나가 아닌 벡터이다.

- 층 사이에 비선형성을 추가한다.

- 두 번째 linear layer를 추가하여 모델이 중간 표현을 학습할 수 있는 데서 비롯된다.

 

 

 

input vector → 첫 번째 linear layer인 hidden vector 계산 → hidden vector를 이용해 output vector 계산

 

 

 

차원이 3인 입력에서 차원이 4인 출력이 만들어짐

 

 

랜덤한 입력으로 테스트

 

 

- 모델의 출력은 행 2개와 열 4개가 있는 텐서입니다.

- 텐서의 행은 배치 차원에 해당한다. 즉, 미니배치의 데이터 포인트 개수이다.

- 열은 각 데이터 포인트에 대한 최종 특성 벡터이다.

- 분류에서 특성 벡터는 예측 벡터이다. (확률 분포에 대응한다.)

 

 

 

 

1.1 MLP 규제 : 가중치 규제와 구조적 규제(또는 드롭아웃)

 

  • 드롭아웃 :  훈련 시 인접한 두 층에 속하는 유닛 사이의 연결을 랜덤하게 끊는다.

- 상호적응 : 다른 유닛 간의 연결을 희생하는 대가로 두 유닛 사이의 연결이 지나치게 강해지는 상황

- 과대적합 모델을 만들어낸다.

- 하이퍼파라미터로 조절 가능한데 보통 드롭 확률을 0.5로 설정한다.

- 드롭아웃은 훈련 시에만 적용하고 평가할 때는 적용하지 않는다.

 

 

 

 

2. 합성곱 신경망 (CNN)

 

 

- 2차원 합성곱 연산

- 입력 행렬이 커널 하나와 합성곱 연산을 수행하여 출력 행력(또는 특성 맵)을 만든다.

- 합성곱은 입력 행렬의 위치마다 커널을 적용

 

- kernel_size : 합성곱의 크기 (커널 행렬의 너비)

  → 커널 크기가 커지면 출력의 크기가 줄어든다.

 

- stride : 입력 텐서에 곱하는 합성곱의 위치

  → stride=1이면 커널이 가장 많이 겹친다. 큰 숫자일수록 출력 텐서의 크기를 의도적으로 줄일 수 있다.

 

- padding : 입력 텐서에 패딩을 얼마나 추가하는지 결정하는 하이퍼파라미터

 

- dilation(또는 팽창 계수) : 간격을 얼마나 띄워 곱할지 제어하는 하이퍼파라미터

  → 파라미터 개수를 늘리지 않고 넓은 입력 공간을 요약하는 데 유용하다.

 

- channel : 입력의 각 포인트에 있는 특성 차원

 

 

 

 

 

 

2.1 CNN을 이용한 예제

 

- sequential : 연속적인 선형 연산을 캡슐화해주는 편리한 래퍼 클래스

- ELU : 합성곱 층 사이에 사용하기에 좋은 비선형 함수.

           0이하를 버리는 대신 지수적으로 감소한다.

 

 

 

 

 

2.2 CNN에 관한 추가 내용

 

① 풀링 (pooling) : 고차원 특성 맵을 저차원 특성 맵으로 요약하는 연산

  ▷ sum pooling

  ▷ average pooling

  ▷ max pooling

 

 

② 배치 정규화 (BatchNorm) : CNN의 출력에 적용되어 활성화값의 평균이 0이고 단위 분산이 되도록 만든다.

- 파라미터 초기화에 덜 민감하게 만들고 학습률 튜닝을 단순화한다.

 

 

③ NiN 연결 (1 x 1 합성곱)

 - kernel_size = 1인합성곱 커널 사용

 - 소량의 파라미터로 비선형성을 추가로 주입할 수 있는 저렴한 방법

 

 

④ 잔차 연결 / 잔차 블록

- 잔차 연결 : (층이 100개 이상인) 진짜 깊은 신경망을 가능하게 한 CNN의 중요한 트렌드로, 스킵 연결(skip connection) 이라고도 한다.

- 합성곱 함수를 conv로 표현하면 잔차 블록의 출력은 다음과 같다.

 

출력 = conv (입력) + 입력

 

 

코드는 여기서 확인하세요.

728x90
반응형