인공신경망 ANN은 간략히 신경망이라고도 하는데, 인간이 뉴런이 연결된 형태를 수학적으로 모방한 모델이다
뇌에서 뉴런들이 어떤 신호, 자극 등을 받고, 그 자극이 어떠한 임계값을 넘어서면 결과 신호를 전달하는 과정에서 착안
ANN뉴런은 어떤 입력값을 받아서 일정 수준이 넘어서면 활성화되어 출력값을 내보낸다.
ANN은 뉴런들을 여러개 쌓아, 두 개의 층 이상으로 구성되는 것이 특징이다.
ANN이후 모델 내 은닉층을 많이 늘려서 학습의 결과를 향상시키는 방법
DNN은 ANN에 비해 더 적은 수의 유닛만으로 복잡한 데이터를 모델링할 수 있게 해준다.
컴퓨터가 스스로 분류 레이블을 만들어내고 공간을 왜곡하고 데이터를 구분짓는 과정을 반복하여 최적의 구분선을 도출해낸다.
많은 데이터와 반복학습, 사전 학습과 오류역전파 기법을 통해 현재 널리 사용되고 있다.
일반 DNN은 기본적으로 1차원 형태의 데이터를 사용한다. 하지만 만약 이미지와 같은 2차원 형태의 데이터일 시(1024x1024)라면 1차원으로 만들어야하기 때문에 이 과정에서 이미지의 공간적/지역적 정보가 손실되게 된다. 또한 추상화 과정 없이 바로 연산과정으로 넘어가기 때문에 학습 시간과 능률의 효율성이 저하된다.
합성곱
합성곱에서의 계산은 밀집층의 계산과는 다름
입력데이터 전체에 가중치를 곱하는 것이 아닌, 일부에 가중치를 곱하는 것
input(입력데이터) = [1,2,3,4,5,6,7,8]
w(가중치) = [1,2,3]
b(절편)
input[0] x w[0] + input[1] x w[1] + input[2] x w[2] + b = 출력값 1
input[1] x w[0] + input[2] x w[1] + input[3] x w[2] + b = 출력값 2
input[2] x w[0] + input[3] x w[1] + input[4] x w[2] + b= 출력값 3
input[3] x w[0] + input[4] x w[1] + input[5] x w[2] + b= 출력값 4
…
input[5] x w[0] + input[6] x w[1] + input[7] x w[2] = 출력값 6
→ 입력데이터에서 한칸씩 밀면서 가중치를 곱해나감(이때 가중치는 같은값을 순서대로 사용함)
총 6개의 출력값이 나옴
위의 입력데이터는 1차원이지만, 입력데이터가 2차원일 때는 가중치 또한 2차원
input
a1 | a2 | a3 |
---|---|---|
a4 | a5 | a6 |
a7 | a8 | a9 |
w(커널크기 2 x 2로 가정)
w1 | w2 |
---|---|
w3 | w4 |
합성곱 시작
a1 x w1 + a2 x w2 +
a4 x w3 + a5 x w5 = 출력값 1
a2 x w1 + a3 x w2 +
a5 x w3 + a6 x w4 = 출력값 2
a4 x w1 + a5 x w2 +
a7 x w3 + a8 x w4 = 출력값 3
a5 x w1 + a6 x w2 +
a8 x w3 + a9 x w4 = 출력값 4
이렇게 나온 출력값들을 입력의 위치에 맞게 2차원으로 배치, 즉 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래로 배치
→ 이렇게 나온 합성곱의 출력을 특성맵 이라고 함
이렇게 필터들의 값(가중치 행렬)을 바꾸어서 여러개의 특성맵을 만들 수 있음
만약 위의 입력 데이터에 다른 가중치 행렬을 2개 더 적용(총 3개)시킨다면 특성맵의 개수는 3개가 되며 (2,2,3)으로 표현할 수 있음.
1 | 2 | 3 | 4 |
---|---|---|---|
5 | 6 | 7 | 8 |
9 | 0 | 1 | 2 |
3 | 4 | 5 | 6 |
0 | 0 | 0 | 0 | 0 | 0 |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 0 |
0 | 5 | 6 | 7 | 8 | 0 |
0 | 9 | 0 | 1 | 2 | 0 |
0 | 3 | 4 | 5 | 6 | 0 |
0 | 0 | 0 | 0 | 0 | 0 |
지금까지 본 합성곱 연산의 경우, 커널은 한칸씩 이동(상,하,좌,우)하며 합성곱을 수행하게 되는데, 이를 2칸씩,3칸씩 이동할 수 있다. 이렇게 이동하는 칸 수가 커질수록 특성맵의 크기는 줄어들기 때문에, 기본적으로 1칸씩 이동한다. 이때 이동하는 거리를 Stride로 표현한다.
Pooling은 합성곱 연산을 통해 만든 특성맵의 크기를 줄이는 역할을 한다. 예를들어 만들어진 특성맵이 (2,2,3)일 때, Pooling을 적용하면 마지막 차원 개수인 3은 그대로 유지하고 너비와 높이만 줄어들어 (1,1,3)이 된다.
Pooling을 하는 방법은 최대풀링(Max pooling)과 평균풀링(Average pooling)이 있다.
특성맵
1 | 2 | 3 |
---|---|---|
4 | 5 | 6 |
7 | 8 | 9 |
(3,3,3)의 특성맵이 있을 때, (위의 표와 같은 크기의 다른 수를 가진 특성맵이 3개 있다고 가정,3차원을 말함) (2,2)의 최대 풀링을 적용한다고 가정한다. 이때 왼쪽 위에서는 5, 오른쪽 위에서는 6, 왼쪽 아래에서는 8, 오른쪽 아래에서는 9가 적용되어 풀링을 수행하였을 때 최종 값은 아래 표와 같은 형태로 나오게 된다.
5 | 6 |
---|---|
8 | 9 |
이때 특성맵이 3개라는 가정하에, 위와 같은 방식으로 나머지 2개의 특성맵 또한 풀링을 진행한다. 그럼 (2,2,3)형태의 특성맵이 만들어지게 된다.
구조
Convolutional layer
합성곱계층인 convolutional는 입력된 이미지의 특징을 반영하여 새로 처리된 이미지를 생성하는 계층이다. 합성곱 계층에서는 이미지에 대해 필터 연산을 수행하게 되는데 필터의 개수, 크기에 따라 이미지 연산이 달라진다.
Pooling layer
풀링 계층은 합성곱 계층을 통과한 이미지의 대표적인 픽셀만 뽑는 역할으르 한다. 대표적인 pooling 방법에는 max pooling, golbal mean pooling 방법이 있는데 일반적으로 cnn에서는 max pooling을 사용한다. max pooling 은 n x n 픽셀에서 가장 큰 값만 추출한다.
pooling의 장점
Fully connected layer
완전연결계층에서는 앞에서 모든 처리를 거친 이미지데이터를 1d array(flatten)로 변환하여 softmax함수를 적용할수있게 변환한다.
어려운 내용들을 깔끔하게 정리해주셔서 감사합니다!!