📌 합성곱 신경망(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) + (2×0) + (3×1) + (2×1) + (1×0) + (0×1) + (3×0) + (0×1) + (1×0) = 6
- 두번째 스텝
(2×1) + (3×0) + (4×1) + (1×1) + (0×0) + (1×1) + (0×0) + (1×1) + (1×0) = 9
- 세번째 스텝
(3×1) + (4×0) + (5×1) + (0×1) + (1×0) + (2×1) + (1×0) + (1×1) + (0×0) = 11
- 네번째 스텝
(2×1) + (1×0) + (0×1) + (3×1) + (0×0) + (1×1) + (1×0) + (4×1) + (1×0) = 10
- 이 과정을 9스텝까지 반복하면 다음과 같은 특성 맵(feature map)을 구할 수 있다
4. 패딩(Padding)
- 5×5 이미지에 3×3 커널로 합성곱 연산, 스트라이드 1일 때 -> 3×3 특성 맵
-> 얻은 특성맵은 입력보다 크기가 작아짐
-> 합성곱층을 여러개 쌓았다면? : 초기 입력보다 매우 작은 특성 맵
-> 패딩 사용으로 연산 후 얻는 특성맵과 입력의 크기를 동일하게 유지
- 지정된 개수의 폭만크 행과 열(테두리)을 추가
- 주로 제로 패딩 (0으로 채움)
5. 가중치와 편향
- 합성곱 신경망의 가중치
- 다중 퍼셉트론
- 3 × 3 이미지 -> 벡터 (1차원텐서), 9개의 뉴론
- 에다가 4개의 뉴런을 가지는 은닉층 추가
- 연결선 = 가중치, 36(9 × 4)개의 가중치
- 합성곱 연산
- 커널 = 2 × 2, 스트라이드 = 1
- 가중치 : 커널 행렬의 원소들
- 합성곱 신경망의 편향
- 이미지와 커널의 연산 후 편향 더해서 특성맵에 추가
6. 특성 맵의 크기 계산 방법
- 입력의 크기 / 커널의 크기 / 스트라이드를 통해 특성맵의 크기 계산
- 입력이미지 : 5 × 5, 커널 : 3 × 3, 스트라이드 = 1 인 경우
- (5 - 3 + 1 ) × (5 - 3 + 1) = 3 × 3
- 총 9 (3 × 3) 스텝 필요
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. 맥스 풀링(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으로부터 정보를 얻는다
- 단어를 글자 단위로 쪼갠다
2. BiLSTM을 이용한 글자 임베딩
- have -> h, a, v, e 로 분리
- 글자에 대해서 임베딩
- 정방향 : 단어의 정방향으로 글자의 임베딩 벡터를 읽음
- 역방향 : 단어의 역방향으로 글자의 임베딩 벡터를 읽음
- 정방향 마지막 & 역방향 첫번째 은닉상태를 연결 -> 이 벡터를 have의 벡터로 사용