NLP(4) 합성곱 신경망

gmlwlswldbs·2021년 11월 5일
0

스터디

목록 보기
13/19

📌 합성곱 신경망(Convolution Neural Network)

  • 합성곱 신경망 : 합성곱층(Convolution layer) + 풀링층(Pooling layer)

  • 합성곱층 : 합성곱 연산(CONV)와 그 결과가 ReLU를 지나는 것
  • 풀링층 : 합성곱층의 결과가 POOL이라는 구간을 지나가는것 (풀링 연산)

1. 합성곱 신경망의 대두

  • 다층 퍼셉트론의 한계 : 왼쪽의 잘 쓴 Y와 오른쪽의 휘갈겨 쓴 Y는 같은 글자이지만 행렬로 표현했을 때 완전히 다른 값을 가진다.
    • 이미지는 다양한 변형이 존재하기 때문에 픽셀값이 조금만 달라져도 민감하게 예측에 영향을 받는다

  • 손글씨를 다층 퍼셉트론으로 분류하기 위해 이미지 -> 벡터(1차원 텐서) 변환하여 입력으로 사용
  • 벡터로 변경했을 때 알아보기 힘듬 -> 공간적 구조 정보 유실로 인해
    • 공간적 구조 정보 : 픽셀끼리의 연관
  • -> 공간적 구조 정보를 보존하면서 학습하는 방법이 필요 -> 합성곱 신경망

2. 채널(Channel)

  • 이미지 : (높이, 너비, 채널)의 3차원 텐서
    • 높이 : 이미지 세로 방향 픽셀 수
    • 너비 : 이미지 가로 방향 픽셀 수
    • 채널 : 색 성분. 깊이(depth라고도 함)
      • 흑백 이미지 : 채널 수 = 1, 각 픽셀은 0~255 값을 가진다
      • 컬러 이미지 : 채널 수 = 3, 각 픽셀은 red/green/blue 세가지의 조합으로 이루어짐

3. 합성곱 연산(Convolution operation)

  • 합성곱층 : 합성곱(컨볼루션) 연산을 통해서 이미지의 특징을 추출
    • 컨볼루션 : 커널 또는 필터라는 nxm 크기의 행렬로 높이x너비 크기의 이미지를 처음부터 끝까지 겹치면서 훑으며 겹치는 부분의 각 이미지와 커널의 원소의 값을 곱해서 모두 더한 값을 출력 (이미지의 왼쪽 위부터 오른쪽으로 훑는다)
    • 커널은 일반적으로 3 × 3 또는 5 × 5 사용
  1. 첫번째 스텝

(1×1) + (2×0) + (3×1) + (2×1) + (1×0) + (0×1) + (3×0) + (0×1) + (1×0) = 6

  1. 두번째 스텝

(2×1) + (3×0) + (4×1) + (1×1) + (0×0) + (1×1) + (0×0) + (1×1) + (1×0) = 9

  1. 세번째 스텝

(3×1) + (4×0) + (5×1) + (0×1) + (1×0) + (2×1) + (1×0) + (1×1) + (0×0) = 11

  1. 네번째 스텝

(2×1) + (1×0) + (0×1) + (3×1) + (0×0) + (1×1) + (1×0) + (4×1) + (1×0) = 10

  • 이 과정을 9스텝까지 반복하면 다음과 같은 특성 맵(feature map)을 구할 수 있다

  • 스트라이드 (stride) : 커널의 이동 범위

    • 위의 예시는 스트라이드가 1
    • 사용자가 정할 수 있음
  • 아래 예시는 스트라이드가 2, 5×5 이미지에 3×3 커널로 연산하여 2×2의 특성맵 얻는 과정

4. 패딩(Padding)

  • 5×5 이미지에 3×3 커널로 합성곱 연산, 스트라이드 1일 때 -> 3×3 특성 맵
    -> 얻은 특성맵은 입력보다 크기가 작아짐
    -> 합성곱층을 여러개 쌓았다면? : 초기 입력보다 매우 작은 특성 맵
    -> 패딩 사용으로 연산 후 얻는 특성맵과 입력의 크기를 동일하게 유지

  • 지정된 개수의 폭만크 행과 열(테두리)을 추가
  • 주로 제로 패딩 (0으로 채움)

5. 가중치와 편향

  1. 합성곱 신경망의 가중치

  • 다중 퍼셉트론
    • 3 × 3 이미지 -> 벡터 (1차원텐서), 9개의 뉴론
    • 에다가 4개의 뉴런을 가지는 은닉층 추가
    • 연결선 = 가중치, 36(9 × 4)개의 가중치

  • 합성곱 연산
    • 커널 = 2 × 2, 스트라이드 = 1
    • 가중치 : 커널 행렬의 원소들

  • 다층 퍼셉트론보다 적은 수의 가중치사용

  • 공간적 구조 정보 보존

  • 다층 퍼셉트론에서 은닉층에서 활성화함수를 통과시키듯 특성맵은 비성형성 추가를 위해 활성화함수를 통과함. (렐루 또는 렐루변형)

  • 특성맵 얻기 + 활성화 함수 -> 합성곱 층

  1. 합성곱 신경망의 편향

  • 이미지와 커널의 연산 후 편향 더해서 특성맵에 추가

6. 특성 맵의 크기 계산 방법

  • 입력의 크기 / 커널의 크기 / 스트라이드를 통해 특성맵의 크기 계산

  • 입력이미지 : 5 × 5, 커널 : 3 × 3, 스트라이드 = 1 인 경우
    • (5 - 3 + 1 ) × (5 - 3 + 1) = 3 × 3
    • 총 9 (3 × 3) 스텝 필요

  • 패딩의 폭 : P

7. 다수의 채널을 가질 경우의 합성곱 연산(3차원 텐서의 합성곱 연산)

  • 다수의 채널을 가진 입력 이미지
  • <입력 채널 수 = 커널 채널 수> 여야함
  • 합성곱 연산을 채널마다 수행해서 다 더함

  • 3개의 채널을 가진 이미지, 3개의 채널을 가진 커널
    • 3개의 커널 (X) 3개의 채널을 가진 1개의 커널 (O)
  • 특성맵의 채널은 컬러의 의미는 아니다

8. 3차원 텐서의 합성곱 연산

  • 입력 데이터 (Ih, Iw, Ci)
  • 커널 (Kh, Kw, Ci)
  • 특성맵 (Oh, Ow, 1)

  • 하나의 입력에 여러 개의 커널을 사용하는 합성곱 연산
  • Co : 커널의 수
  • 다수의 커널 사용하면 커널의 수가 특성맵의 채널 수가 됨

  • 가중치 = 커널의 원소
  • 하나의 커널의 채널 하나에는 Ki × Ko 개의 매개변수가 있다
  • 합성곱 연산하기 위해서는 입력의 채널수 = 커널의 채널수여야하기 때문에
  • 하나의 커널에는 Ki × Ko × Ci 개의 매개변수가 있고
  • 커널의 갯수는 총 Co개이므로
  • 총 Ki × Ko × Ci × Co 개의 가중치 매개변수가 있다

9. 풀링(Pooling)

  • 합성곱 층 다음에 풀링 층
  • 풀링 연산 : 특성 맵을 다운샘플링하여 특성맵의 크기를 줄임
  • 최대 풀링(max pooling), 평균 풀링(average pooling)

  • max pooling : 겹치는 영역 안에서 최대값을 추출함

  • average pooling : 평균값을 추출함

  • 공 : 커널과 스트라이드의 개념이 있다

  • 차 : 합성곱 연산과 다르게 학습할 가중치가 없음. 연산 후 채널 수 변하지 않는다

  • 특성맵의 크기가 줄어드므로 특성맵의 가중치 갯수를 줄여준다.

📌 자연어 처리를 위한 1D CNN(1D Convolutional Neural Networks)

1. 2D 합성곱(2D Convolutions)

  • 이미지, 영상처리에 사용되는 2D 합성곱
  • 이미지의 특징을 추출
  • 위의 내용과 동일

2. 1D 합성곱(1D Convolutions)

  • 자연어처리에 사용되는 1D 합성곱
  • 각 문장은 임베딩층을 지나 각 단어가 임베딩 벡터가 된 상태로 LSTM의 입력이 됨
  • 1D CNN도 마찬가지로 각 단어가 벡터로 변환된 문장행렬이 입력이 됨

  • 토큰화, 패딩, 임베딩층을 거쳐 위와 같은 문장 형태 행렬이 됨

  • 1D CNN에서는
    • 커널의 너비 = 임베딩 벡터의 차원
    • 따라서 높이만 명명하여 커널의 사이즈로 간주
      • ex. 커널 사이즈 = 2 : 높이 2, 너비 임베딩 벡터의 차원 인 커널
    • 너비 방향으로는 움직이지 않고 높이 방향(아래쪽)으로만 움직이게 되어 있음

  • 스텝 1 : wait for, 2 : for the, 3 : the video, 4 : video and 5 : and do, 6 : do n't, 7: n't rent, 8 : rent it
  • 결과 : 8차원 백터

  • 커널 사이즈가 3인 경우

  • 커널 사이즈의 의미 : 커널은 가중치행렬이므로 커널 사이즈에 따라 학습하게 되는 파라미터 수가 달라진다. 1D CNN 자연어 처리에서는 참고하는 단어의 묶음 크기(n-gram)가 달라짐.

3. 맥스 풀링(Max-pooling)

  • 풀링층에서는 대표적으로 맥스 풀링을 사용

4. 신경망 설계하기

  • 이진 분류 신경망 설계 (소프트맥스 함수 사용) 출력층에 뉴런의 갯수 2
  • 커널 사이즈 : 4 (2개), 3(2개), 2(2개)
  • 문장의 길이 = 9
  • 합성곱 연산의 결과 : 6, 7, 8 차원 벡터 2개씩
  • 맥스 풀링하여 6개의 스칼라값을 얻은 후 모두 연결하여 벡터로 만듬 (1D CNN)
  • 뉴런이 2개인 출력층에 완전 연결(Dense Layer)하여 텍스트 분류

📌 글자 임베딩(Character Embedding)

1. 1D CNN을 이용한 글자 임베딩

  • 1D CNN : 전체 시퀀스 입력 내부의 더 작은 시퀀스로부터 정보를 얻어내는 알고리즘. N-gram으로부터 정보를 얻는다
  • 단어를 글자 단위로 쪼갠다

  • have -> h, a, v, e 로 분리

  • 글자에 대해서 임베딩

  • 그 다음은 앞의 내용과 같다

  • 최종적으로 얻은 벡터는(concatenate한 벡터) have의 벡터로 사용한다

  • OOV 문제 해결 가능

2. BiLSTM을 이용한 글자 임베딩

  • have -> h, a, v, e 로 분리
  • 글자에 대해서 임베딩
  • 정방향 : 단어의 정방향으로 글자의 임베딩 벡터를 읽음
  • 역방향 : 단어의 역방향으로 글자의 임베딩 벡터를 읽음
  • 정방향 마지막 & 역방향 첫번째 은닉상태를 연결 -> 이 벡터를 have의 벡터로 사용

0개의 댓글