일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 상속
- rnn
- 데이터분석
- 컴퓨터구조
- SQL
- CSS
- 순환신경망
- c언어
- 컴퓨터비전
- 개발일기
- 머신러닝
- 정보처리기사실기
- 자바 실습
- 혼공머신
- 중학수학
- 중학1-1
- 정보처리기사필기
- 자바스크립트
- 자바
- ChatGPT
- JSP/Servlet
- 자바스크립트심화
- 데이터베이스
- 연습문제
- 딥러닝
- 디버깅
- JDBC
- JSP
- 파이썬
- html/css
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
이미지를 위한 인공 신경망 1 - 합성곱 신경망의 구성 요소 1 : 합성곱에 대하여 본문
이제 드디어 합성곱 신경망에 대해서 공부할 시기가 왔다. 여기서부터는 다시 학교 수업에 올라온 강의 영상을 들으면서 공부를 진행할 생각이다. 그리고 지난번에 강의 영상이 없는 줄 알고 혼자서 코드 보면서 학습했던 내용이 있는데 그 부분도 선생님이 올려주신 게 있어서 거기서부터 내용을 추가하며 다시 학습을 진행할 생각이다.
그래도 선생님들이 나름 성실하게 잘 가르쳐주시는 편이다. 컴퓨터 비전을 강의하셨던 선생님들은 정말 못 가르치고 마음에 안 들었지만 말이다.
이번 단원에서는 합성곱 신경망을 구성하는 기본 개념과 동작 원리를 배우고 간단한 합성곱, 폴링 계산 방법을 익힌다.
시작하기 전에
로지스틱 회귀의 성능은 81% 정도였는데 딥러닝의 성능은 87%로 크게 높아졌다. 이 아이디어를 딥러닝에 적용해 보는 학습을 진행해 볼 것이다.
합성곱
합성곱은 마치 입력 데이터에 마법의 도장을 찍어서 유용한 특성만 드러나게 하는 것으로 비유할 수 있다. 그럼 여기서 합성곱의 동작 원리를 자세하 알아보겠다.
인공신경망은 처음에 가중치 w1~w10과 절편 b를 랜덤하게 초기화한 다음 에포크를 반복하면서 경사 하강법 알고리즘을 사용하여 손실이 낮아지도록 최적의 가중치와 절편을 잦아간다. 이것이 바로 모델 훈련이다.
예를 들어 밀집층에 뉴런이 3개 있다면 출력은 3개가 된다. 입력 개수에 상관없이 동일하다. 합성곱은 밀집층의 계산과 조금 다르다. 입력 데이터 전체에 가중치를 적용하는 것이 아니라 일부에 가중치를 곱한다.
가중치 w1~w3이 입력의 처음 3개 특성과 곱해져 1개의 출력을 만든다. 그다음이 중요하다. 이 뉴런이 한 칸 아래로 이동해 두 번째부터 네 번째 특성과 곱해져 새로운 출력을 만든다.
여기서 중요한 것은 첫 번째 합성곱에 사용된 가중치 w1~w3과 절편 b가 두 번째 합성곱에도 동일하게 사용된다. 이렇게 한 칸씩 아래로 이동하면서 출력을 만드는 것이 합성곱이다. 여기에서는 이 뉴런의 가중치가 3개이기 때문에 모두 8개의 출력이 만들어진다.
쉽게 구분할 수 있도록 8개의 계산을 다른 색으로 나타냈지만 모두 같은 뉴런이다. 즉 모두 같은 가중치 w1~w3과 절편 b를 사용한다.
밀집층의 뉴런은 입력 개수만큼 10개의 가중치를 가지고 1개의 출력을 만든다. 합성곱 층의 뉴런은 3개의 가중치를 가지고 8개의 출력을 만든다. 합성곱 층의 뉴런에 있는 가중치 개수는 정하기 나름이다. 즉 또 다른 하이퍼파라미터다. 이는 마치 입력 데이터를 이동하면서 같은 도장으로 하나씩 찍는 것처럼 생각할 수 있다. 도장을 찍을 때마다 출력이 하나씩 만들어지는 것이다.
이전에 그렸던 신경망 층의 그림은 뉴런이 길게 늘어서 있고 서로 조밀하게 연결되어 있다. 그런데 합성곱에서는 뉴런이 입력 위를 이동하면서 출력을 만들기 때문에 이런 식으로 표현하기가 어렵다. 또 뉴런이라고 부르기도 어색하다. 합성곱 신경망에서는 완전 연결 신경망과 달리 뉴런을 필터라고 부른다. 혹은 커널이라고도 부른다.
여기서는 케라스 API와 이름을 맞추어 뉴런 개수를 이야기할 때는 필터라 ㅂ르고, 입력에 곱해지는 가중치를 의미할 때는 커널이라고 부르겠다.
입력이 2차원 배열이면 필터도 2차원이어야 한다. 이 그림에서 필터의 커널 크기는 (3, 3)으로 가정한다. 그다음 왼쪽 위 모서리에서부터 합성곱을 시작한다. 입력의 9개 요소와 커널의 9개 가중치를 곱한 후 1개의 출력을 만든다.
그다음에는 필터가 오른쪽으로 한 칸 이동하여 합성곱을 또 수행한다. 입력의 너비가 4이므로 더 이상 오른쪽으로 한 칸 이동할 수 없다. 이럴 때는 아래로 한 칸 이동한 다음 다시 왼쪽에서부터 합성곱을 수행한다. 그리고 다시 오른쪽으로 한 칸 이동한다.
합성곱은 마치 도장을 찍듯이 왼쪽에서 오른쪽 맨 아래까지 이동하면서 출력을 만든다. 계산식은 밀집층과 크게 다르지 않다. 입력과 가중치의 행과 열을 맞추어 곱셈하고 모두 더하는 게 전부이다. 그림에서 필터는 모두 4번 이동할 수 있기 때문에 4개의 출력을 만든다.
이때 4개의 출력을 필터가 입력에 놓인 위치에 맞게 2차원으로 배치한다. 즉 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 모두 4개의 위치에 해당 값을 놓는다. 이렇게 출력을 2차원으로 표현하면 (4, 4) 크기의 입력을 (2, 2) 크기로 압축한 느낌이 난다. 합성곱 계산을 통해 얻은 출력을 특별히 특성 맵이라고 부른다.
밀집층에서 여러 개의 뉴런을 사용하듯이 합성곱 층에서도 여러 개의 필터를 사용한다. 하나만 사용할 이유는 없다. 위 그림처럼 여러 개의 필터를 사용하면 만들어진 특성 맵은 순서대로 차곡차곡 쌓인다. (2, 2) 크기의 특성 맵을 쌓으면 3차원 배열이 된다. 이 그림에서는 3개의 필터를 사용했기 때문에 (2, 3, 3) 크기의 3차원 배열이 된다.
밀집층에 있는 뉴런의 가충치가 모두 다르듯이 합성곱 층에 있는 필터의 가중치(커널)도 모두 다르다.
실제 계산은 밀접층과 동일하게 단순히 입력과 가중치를 곱하는 것이지만 2차원 형태를 유지하는 점이 다르다. 또 입력보다 훨씬 작은 크기의 커널을 사용하고 입력 위를 (왼쪽에서 오른쪽으로, 위에서 아래로) 이동하면서 2차원 특성 맵을 만든다. 이렇게 2차원 구조를 그대로 사용하기 때문에 합성곱 신경망이 이미지 처리 분야에서 뛰어난 성능을 발휘한다.
학습을 마치고
이번 단원에서는 실습은 없고 개념 설명이 많다. 합성곱 신경망이 무엇인지 먼저 이해해야 하기 때문이다. 다음 포스트에서도 개념 설명이 계속해서 이어진다. 이번 단원에서는 코드를 칠 일은 거의 없었다.
이어서 케라스 합성곱 층에 대해서 학습해 보겠다.
'인공지능 > 딥러닝' 카테고리의 다른 글
이미지를 위한 인공 신경망 3 - 합성공 신경망을 사용한 이미지 분류 1 : 합성곱 신경망 만들기 (0) | 2024.10.27 |
---|---|
이미지를 위한 인공 신경망 2 - 합성곱 신경망의 구성 요소 2 : 케라스 합성곱 층 및 합성곱 신경망의 전체 구조 (1) | 2024.10.27 |
케라스 11 - tf.data.Dataset 클래스 (1) | 2024.10.26 |
케라스 10 - 텐서플로 데이터셋 (0) | 2024.10.26 |
케라스 9 - 사용자 정의 : 배치 및 자동 미분을 활용한 모델 훈련 (1) | 2024.10.26 |