퍼셉트론은 데이터에서 복잡한 패턴을 학습할 수 없다는 단점이 있다.
배타적 논리합(XOR)에 해당하는 데이터 셋을 퍼셉트론은 학습하지 못한다.
- MLP (MultiLayer Perceptron)
- 간단한 퍼셉트론을 구조적으로 확장한 신경망
- CNN (Convolutional Neural Network)
- 디지털 신호 처리에 사용하는 윈도 필터에 영향을 받아 만든 신경망
- 윈도 특성 덕분에 입력에 있는 국부 패턴을 학습할 수 있다.
- 컴퓨터 비전에 아주 적합하고 단어나 문장 같으느 순차 데이터에서 부분 구조를 감지하는 데도 이상적이다.
크게 위의 두 가지를 소개하고 예제도 함께 보겠다.
1. 다층 퍼셉트론 (MLP)
- MLP는 많은 퍼셉트론이 모여 있으므로 층의 출력은 출력값 하나가 아닌 벡터이다.
- 층 사이에 비선형성을 추가한다.
- 두 번째 linear layer를 추가하여 모델이 중간 표현을 학습할 수 있는 데서 비롯된다.
input vector → 첫 번째 linear layer인 hidden vector 계산 → hidden vector를 이용해 output vector 계산
- 모델의 출력은 행 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 (입력) + 입력
'Deep Learning > Natural Language Processing' 카테고리의 다른 글
N label classification with ESG data (0) | 2023.08.02 |
---|---|
[pytorch] 단어와 타입 임베딩 (2) | 2022.07.27 |
[pytorch] 신경망의 기본 구성 요소 (0) | 2022.07.25 |
[pytorch] nlp기술 빠르게 훑어보기 (0) | 2022.07.18 |
[pytorch] Intro (0) | 2022.07.18 |