합성곱 신경망
- 합성곱 신경망은 이미지 처리에 탁월한 성능을 보이는 신경망
- 합성곱 신경망은 주로 이미지 처리(비전 분야)에서 사용되는 알고리즘이지만
이를 응용해서 자연어 처리에 사용하기 위한 시도들이 존재
합성곱 신경망의 대두
- 이미지 처리를 하기 위해서 다층 퍼셉트론을 사용할 수 있지만 한계가 있었음
- 예) 같은 알파벳 Y이지만 정자로 쓴 손글씨와 휘갈겨 쓴 손글씨의 경우
기계가 보기에는 각 픽셀마다 가진 값이 대부분 상이하므로 사실상 다른 값을 가진 입력으로 보게 됨
그런데 이미지라는 것은 같은 대상이라도 다양한 변형이 존재하므로
픽셀만 값이 달려져도 민감하게 예측에 영향을 받는 다층 퍼셉트론에 한계가 발생

- 또한 이미지를 1차원 텐서인 벡터로 변환하고 다층 퍼셉트론의 입력층으로 사용할 경우
원래 어떤 이미지였는지 알 수 없도록 공간적인 구조 정보가 유실되게 되므로
거리가 가까운 어떤 픽셀들끼리는 어떤 연관이 있고, 어떤 픽셀들끼리는 값이 비슷한지 등을 알 수 없게 됨

- 그러므로 이미지의 공간적인 구조 정보를 보존하면서 학습할 수 있는 방법이 필요하게 되어 합성곱 신경망이 대두되게 됨
채널
- 이미지는 (높이, 너비, 채널)이라는 3차원 텐서이며
높이는 이미지의 세로 방향 픽셀 수, 너비는 이미지의 가로 방향 픽셀 수, 채널(= 깊이)은 색 성분을 의미함
흑백 이미지는 채널 수가 1이며, 각 픽셀은 0부터 255 사이의 값을 가지게 됨
컬러 이미지는 적색, 녹색, 청색으로 채널 수가 3이며, 하나의 픽셀은 세 가지 색깔의 조합으로 이루어지게 됨


합성곱 연산
- 합성곱층은 합성곱 연산을 통해서 이미지의 특징을 추출하는 역할을 함
- 합성곱은 커널 또는 필터라는 n×m 크기의 행렬로 높이×너비 크기의 이미지를 처음부터 끝까지 겹치며 훑으면서
n×m 크기의 겹쳐지는 부분의 각 이미지와 커널의 원소의 값을 곱해서 모두 더한 값을 출력함
이때, 이미지의 가장 왼쪽 위부터 가장 오른쪽 아래까지 순차적으로 훑게 됨 - 커널은 일반적으로 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번의 스텝을 마친 후 최종 결과
이와 같이 입력으로부터 커널을 사용하여 합성곱 연산을 통해 나온 결과를 특성맵이라고 함

- 커널의 크기 뿐만 아니라 커널의 이동 범위인 스트라이드 또한 변경이 가능함

패딩
- 5×5 이미지에 3×3의 커널로 합성곱 연산을 하였을 때, 스트라이드가 1일 경우에는 3×3의 특성 맵을 얻게 되므로
합성곱 연산의 결과로 얻은 특성 맵은 입력보다 크기가 작아진다는 특징을 가지게 됨 - 만약 합성곱 층을 여러 개 쌓았다면 최종적으로 얻은 특성 맵은 초기 입력보다 매우 작아진 상태가 되어버리므로
합성곱 연산 이후에도 특성 맵의 크기가 입력의 크기와 동일하게 유지되도록 하고 싶다면 패딩을 사용하면 됨 - 패딩은 입력의 가장자리에 지정된 개수의 폭만큼 행과 열을 추가해주는 것으로 주로 값을 0으로 채우는 제로 패딩을 사용하게 됨

- 만약 스트라이드가 1이고 3×3의 커널을 사용한다면 1폭짜리 제로 패딩을 사용하고,
5×5의 커널을 사용한다면 2폭짜리 제로 패딩을 사용하면 특성 맵의 크기를 보존할 수 있게 됨 - 예) 5×5의 이미지에 1폭짜리 제로 패딩을 하면 7×7의 이미지가 되는데
여기에 3×3의 커널을 사용하여 1 스트라이드로 합성곱을 한 후의 특성 맵은 기존의 입력 이미지의 크기와 같은 5×5가 됨
가중치와 편향
- 다층 퍼셉트론의 가중치
다층 퍼셉트론으로 3×3의 이미지를 처리할 때 이미지를 1차원 텐서인 벡터로 만들면 입력층은 9개의 뉴런을 가지게 됨
그리고 4개의 뉴런을 가지는 은닉층을 추가하면 9×4 = 36개의 가중치를 가지게 됨

- 합성곱 신경망의 가중치
합성곱 신경망으로 3×3의 이미지를 처리할 때 2×2의 커널을 사용하고 스트라이드는 1로 한다면
합성곱 신경망에서 가중치는 커널 행렬의 원소들이므로 이를 인공 신경망의 형태로 표현할 수 있음
최종적으로 특성 맵을 얻기 위해서는 동일한 커널로 이미지 전체를 훑으며 합성곱 연산을 진행하게 되므로
결국 이미지 전체를 훑으면서 사용되는 가중치는 wo, w1, w2, w3 4개가 되며
각 합성곱 연산마다 이미지의 모든 픽셀을 사용하는 것이 아니라, 커널과 맵핑되는 픽셀만을 입력으로 사용하게 됨
결국 합성곱 신경망은 다층 퍼셉트론을 사용할 때보다 훨씬 적은 수의 가중치를 사용하며 공간적 구조 정보를 보존함


- 다층 퍼셉트론의 은닉층
가중치 연산 후에 비선형을 추가하기 위해서 활성화 함수를 통과시키게 됨 - 합성곱 신경망의 은닉층
다층 퍼셉트론과 마찬가지로 합성곱 연산을 통해 얻은 특성 맵은 비선형 추가를 위해 활성화 함수를 지나게 됨
이때 렐루 함수나 렐루 함수의 변형들이 주로 사용되게 되며
이와 같이 합성곱 연산을 통해서 특성 맵을 얻고, 활성화 함수를 지나는 연산을 하는 합성곱 신경망의 층을 합성곱 층이라 함 - 합성곱 신경망의 편향
합성곱 신경망에 편향을 사용한다면 커널을 적용한 뒤에 더해지게 되며
편향은 하나의 값만 존재하고 커널이 적용된 모든 원소에 더해지게 됨

특성 맵의 크기 계산 방법
- 입력의 크기와 커널의 크기, 그리고 스트라이드의 값만 알면 합성곱 연산의 결과인 특성 맵의 크기를 계산할 수 있음

- 예) 5×5 크기의 이미지에 3×3 커널을 사용하고 스트라이드 1로 합성곱 연산을 할 경우
특성 맵의 크기는 (5 - 3 + 1) × (5 - 3 + 1) = 3×3임을 알 수 있음

- 패딩의 폭이 P라고 할 때 패딩까지 고려하여 특성 맵의 높이와 너비를 나타낼 수 있음

다수의 채널을 가질 경우의 합성곱 연산
- 실제 합성곱 연산의 입력은 '다수의 채널을 가진' 이미지 또는 이전 연산의 결과로 나온 특성 맵일 수 있으므로
다수의 채널을 가진 입력 데이터를 가지고 합성곱 연산을 한다면 커널의 채널 수도 입력의 채널 수 만큼 존재해야 함 - 즉, 입력 데이터의 채널 수와 커널의 채널 수는 같아야 합성곱 연산을 채널마다 수행할 수 있게 되고
그 결과를 모두 더하여 최종 특성 맵을 얻을 수 있게 됨 - 커널의 각 채널끼리의 크기는 같아야 하며 각 채널 간 합성곱 연산을 마치고,
그 결과를 모두 더해서 하나의 채널을 가지는 특성 맵을 만들게 됨 - 예) 3개의 채널을 가진 입력 데이터와 3개의 채널을 가진 1개의 커널의 합성곱 연산
즉, 높이 3, 너비 3, 채널 3의 입력이 높이 2, 너비 2, 채널 3의 커널과 합성곱 연산을 하여
높이 2, 너비 2, 채널 1의 특성 맵을 얻는다는 의미임

3차원 텐서의 합성곱 연산
- 입력의 크기와 커널의 크기, 그리고 스트라이드의 값만 알면 합성곱 연산의 결과인 특성 맵의 크기를 계산할 수 있음


- 합성곱 연산에서 다수의 커널을 사용할 경우
사용한 커널 수는 합성곱 연산의 결과로 나오는 특성 맵의 채널 수가 되며
가중치는 커널의 원소들이므로 하나의 커널의 하나의 채널은 Ki×Ko개의 매개변수를 가지고
합성곱 연산을 하려면 커널의 입력 데이터의 채널 수와 동일한 채널 수를 가져야하므로 Ci가 곱해지게 됨
그리고 이러한 커널이 총 Co개 있어야 하므로 가중치 매개변수의 총 수는 Ki×Ko×Ci×Co가 되게 됨


풀링
- 합성곱 층 다음에는 풀링 층을 추가하는 것이 일반적
- 풀링 층에서는 특성 맵을 다운샘플링하여 특성 맵의 크기를 줄이는 풀링 연산이 이루어지게 됨
- 풀링 연산에는 최대 풀링과 평균 풀링이 존재하며
최대 풀링은 커널과 겹치는 영역 안에서 최대값을 추출하는 방식으로 다운샘플링하고
평균 풀링은 최대값을 추출하는 것이 아니라 평균값을 추출하는 방식으로 다운샘플링하게 됨 - 스트라이드가 2일 때, 2×2 크기의 커널로 최대 풀링을 할 경우 특성 맵이 절반의 크기로 다운샘플링되게 됨

'ML > 딥 러닝을 이용한 자연어 처리' 카테고리의 다른 글
합성곱 신경망
- 합성곱 신경망은 이미지 처리에 탁월한 성능을 보이는 신경망
- 합성곱 신경망은 주로 이미지 처리(비전 분야)에서 사용되는 알고리즘이지만
이를 응용해서 자연어 처리에 사용하기 위한 시도들이 존재
합성곱 신경망의 대두
- 이미지 처리를 하기 위해서 다층 퍼셉트론을 사용할 수 있지만 한계가 있었음
- 예) 같은 알파벳 Y이지만 정자로 쓴 손글씨와 휘갈겨 쓴 손글씨의 경우
기계가 보기에는 각 픽셀마다 가진 값이 대부분 상이하므로 사실상 다른 값을 가진 입력으로 보게 됨
그런데 이미지라는 것은 같은 대상이라도 다양한 변형이 존재하므로
픽셀만 값이 달려져도 민감하게 예측에 영향을 받는 다층 퍼셉트론에 한계가 발생

- 또한 이미지를 1차원 텐서인 벡터로 변환하고 다층 퍼셉트론의 입력층으로 사용할 경우
원래 어떤 이미지였는지 알 수 없도록 공간적인 구조 정보가 유실되게 되므로
거리가 가까운 어떤 픽셀들끼리는 어떤 연관이 있고, 어떤 픽셀들끼리는 값이 비슷한지 등을 알 수 없게 됨

- 그러므로 이미지의 공간적인 구조 정보를 보존하면서 학습할 수 있는 방법이 필요하게 되어 합성곱 신경망이 대두되게 됨
채널
- 이미지는 (높이, 너비, 채널)이라는 3차원 텐서이며
높이는 이미지의 세로 방향 픽셀 수, 너비는 이미지의 가로 방향 픽셀 수, 채널(= 깊이)은 색 성분을 의미함
흑백 이미지는 채널 수가 1이며, 각 픽셀은 0부터 255 사이의 값을 가지게 됨
컬러 이미지는 적색, 녹색, 청색으로 채널 수가 3이며, 하나의 픽셀은 세 가지 색깔의 조합으로 이루어지게 됨


합성곱 연산
- 합성곱층은 합성곱 연산을 통해서 이미지의 특징을 추출하는 역할을 함
- 합성곱은 커널 또는 필터라는 n×m 크기의 행렬로 높이×너비 크기의 이미지를 처음부터 끝까지 겹치며 훑으면서
n×m 크기의 겹쳐지는 부분의 각 이미지와 커널의 원소의 값을 곱해서 모두 더한 값을 출력함
이때, 이미지의 가장 왼쪽 위부터 가장 오른쪽 아래까지 순차적으로 훑게 됨 - 커널은 일반적으로 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번의 스텝을 마친 후 최종 결과
이와 같이 입력으로부터 커널을 사용하여 합성곱 연산을 통해 나온 결과를 특성맵이라고 함

- 커널의 크기 뿐만 아니라 커널의 이동 범위인 스트라이드 또한 변경이 가능함

패딩
- 5×5 이미지에 3×3의 커널로 합성곱 연산을 하였을 때, 스트라이드가 1일 경우에는 3×3의 특성 맵을 얻게 되므로
합성곱 연산의 결과로 얻은 특성 맵은 입력보다 크기가 작아진다는 특징을 가지게 됨 - 만약 합성곱 층을 여러 개 쌓았다면 최종적으로 얻은 특성 맵은 초기 입력보다 매우 작아진 상태가 되어버리므로
합성곱 연산 이후에도 특성 맵의 크기가 입력의 크기와 동일하게 유지되도록 하고 싶다면 패딩을 사용하면 됨 - 패딩은 입력의 가장자리에 지정된 개수의 폭만큼 행과 열을 추가해주는 것으로 주로 값을 0으로 채우는 제로 패딩을 사용하게 됨

- 만약 스트라이드가 1이고 3×3의 커널을 사용한다면 1폭짜리 제로 패딩을 사용하고,
5×5의 커널을 사용한다면 2폭짜리 제로 패딩을 사용하면 특성 맵의 크기를 보존할 수 있게 됨 - 예) 5×5의 이미지에 1폭짜리 제로 패딩을 하면 7×7의 이미지가 되는데
여기에 3×3의 커널을 사용하여 1 스트라이드로 합성곱을 한 후의 특성 맵은 기존의 입력 이미지의 크기와 같은 5×5가 됨
가중치와 편향
- 다층 퍼셉트론의 가중치
다층 퍼셉트론으로 3×3의 이미지를 처리할 때 이미지를 1차원 텐서인 벡터로 만들면 입력층은 9개의 뉴런을 가지게 됨
그리고 4개의 뉴런을 가지는 은닉층을 추가하면 9×4 = 36개의 가중치를 가지게 됨

- 합성곱 신경망의 가중치
합성곱 신경망으로 3×3의 이미지를 처리할 때 2×2의 커널을 사용하고 스트라이드는 1로 한다면
합성곱 신경망에서 가중치는 커널 행렬의 원소들이므로 이를 인공 신경망의 형태로 표현할 수 있음
최종적으로 특성 맵을 얻기 위해서는 동일한 커널로 이미지 전체를 훑으며 합성곱 연산을 진행하게 되므로
결국 이미지 전체를 훑으면서 사용되는 가중치는 wo, w1, w2, w3 4개가 되며
각 합성곱 연산마다 이미지의 모든 픽셀을 사용하는 것이 아니라, 커널과 맵핑되는 픽셀만을 입력으로 사용하게 됨
결국 합성곱 신경망은 다층 퍼셉트론을 사용할 때보다 훨씬 적은 수의 가중치를 사용하며 공간적 구조 정보를 보존함


- 다층 퍼셉트론의 은닉층
가중치 연산 후에 비선형을 추가하기 위해서 활성화 함수를 통과시키게 됨 - 합성곱 신경망의 은닉층
다층 퍼셉트론과 마찬가지로 합성곱 연산을 통해 얻은 특성 맵은 비선형 추가를 위해 활성화 함수를 지나게 됨
이때 렐루 함수나 렐루 함수의 변형들이 주로 사용되게 되며
이와 같이 합성곱 연산을 통해서 특성 맵을 얻고, 활성화 함수를 지나는 연산을 하는 합성곱 신경망의 층을 합성곱 층이라 함 - 합성곱 신경망의 편향
합성곱 신경망에 편향을 사용한다면 커널을 적용한 뒤에 더해지게 되며
편향은 하나의 값만 존재하고 커널이 적용된 모든 원소에 더해지게 됨

특성 맵의 크기 계산 방법
- 입력의 크기와 커널의 크기, 그리고 스트라이드의 값만 알면 합성곱 연산의 결과인 특성 맵의 크기를 계산할 수 있음

- 예) 5×5 크기의 이미지에 3×3 커널을 사용하고 스트라이드 1로 합성곱 연산을 할 경우
특성 맵의 크기는 (5 - 3 + 1) × (5 - 3 + 1) = 3×3임을 알 수 있음

- 패딩의 폭이 P라고 할 때 패딩까지 고려하여 특성 맵의 높이와 너비를 나타낼 수 있음

다수의 채널을 가질 경우의 합성곱 연산
- 실제 합성곱 연산의 입력은 '다수의 채널을 가진' 이미지 또는 이전 연산의 결과로 나온 특성 맵일 수 있으므로
다수의 채널을 가진 입력 데이터를 가지고 합성곱 연산을 한다면 커널의 채널 수도 입력의 채널 수 만큼 존재해야 함 - 즉, 입력 데이터의 채널 수와 커널의 채널 수는 같아야 합성곱 연산을 채널마다 수행할 수 있게 되고
그 결과를 모두 더하여 최종 특성 맵을 얻을 수 있게 됨 - 커널의 각 채널끼리의 크기는 같아야 하며 각 채널 간 합성곱 연산을 마치고,
그 결과를 모두 더해서 하나의 채널을 가지는 특성 맵을 만들게 됨 - 예) 3개의 채널을 가진 입력 데이터와 3개의 채널을 가진 1개의 커널의 합성곱 연산
즉, 높이 3, 너비 3, 채널 3의 입력이 높이 2, 너비 2, 채널 3의 커널과 합성곱 연산을 하여
높이 2, 너비 2, 채널 1의 특성 맵을 얻는다는 의미임

3차원 텐서의 합성곱 연산
- 입력의 크기와 커널의 크기, 그리고 스트라이드의 값만 알면 합성곱 연산의 결과인 특성 맵의 크기를 계산할 수 있음


- 합성곱 연산에서 다수의 커널을 사용할 경우
사용한 커널 수는 합성곱 연산의 결과로 나오는 특성 맵의 채널 수가 되며
가중치는 커널의 원소들이므로 하나의 커널의 하나의 채널은 Ki×Ko개의 매개변수를 가지고
합성곱 연산을 하려면 커널의 입력 데이터의 채널 수와 동일한 채널 수를 가져야하므로 Ci가 곱해지게 됨
그리고 이러한 커널이 총 Co개 있어야 하므로 가중치 매개변수의 총 수는 Ki×Ko×Ci×Co가 되게 됨


풀링
- 합성곱 층 다음에는 풀링 층을 추가하는 것이 일반적
- 풀링 층에서는 특성 맵을 다운샘플링하여 특성 맵의 크기를 줄이는 풀링 연산이 이루어지게 됨
- 풀링 연산에는 최대 풀링과 평균 풀링이 존재하며
최대 풀링은 커널과 겹치는 영역 안에서 최대값을 추출하는 방식으로 다운샘플링하고
평균 풀링은 최대값을 추출하는 것이 아니라 평균값을 추출하는 방식으로 다운샘플링하게 됨 - 스트라이드가 2일 때, 2×2 크기의 커널로 최대 풀링을 할 경우 특성 맵이 절반의 크기로 다운샘플링되게 됨
