유진의 코딩스토리
Python DL 실습 5 [합성곱 신경망] 본문
기존 DNN 문제점
기존 DNN은 1차원 형태로 데이터를 표현하며 2차원 이미지 데이터를 1차원으로 표현할 경우 인접한 영역의 상관관계가 손실된다.
인접한 픽셀들이 모여 이미지의 각 부분을 표현하나, 한 줄로 늘어뜨린 1차원 데이터에서는 상관관계가 제거된다.
합성곱신경망(CNN)
위 DNN의 문제점을 해결한 방법이 바로 CNN이다.
컨볼루션 신경망은 모든 신경망 구조 중 가장 강력한 성능을 보이는 신경망 중 하나로 2차원 이미지 형태를 유지하면서 입력을 처리하기 때문에 이미지 처리에 적합하다.
CNN은 하위 레이어의 노드들고 상위 레이어의 노드들이 부분적으로만 연결되어 있다.
CNN은 일반적인 완전 연결 신경망(fully connected neural network)와 달리 데이터의 지역적 특성을 학습하는데 강점이 있다.
CNN으로 이뤄진 네트워크는 Convolution계층과 Pooling 계층이 새로 추가된 것을 알 수 있다.
CNN의 기본 구조
CNN은 이미지 데이터의 공간적 상관관계를 유지하면서 이미지 내 특징을 추출할 수 있다.
convolution + Pooling + Flatten : 이미지의 공간적 상관관계를 유지하며 일렬로 배열한다.
합성곱 계층과 pooling 계층이 반복되다가 후반에 fully connected layer가 등장하는 구조이다.
합성곱층의 filter들은 학습 시작 전 랜덤하게 생성하고 역전파 학습을 통해 손실함수 값을 낮추도록 filter를 훈련시킨다.
충분한 학습이 이루어지면 낮은 층의 필터는 저수준의 로컬한 특징을 찾아내고 층이 높아질수록 더 고수준의 글로벌한 특징을 찾아낸다.
합성곱 계층
합성곱 연산
filter 또는 kernel을 사용하여 입력 이미지에서 feature를 추출한다.
합성곱 연산은 입력 데이터에 작은 크기의 filter를 적용하여 일부 영역과 해당 필터간의 점곱 연산을 수행하여 특징맵(feature map)을 생성한다.
컨볼루션 신경망에서도 커널이 입력층의 각 화소를 중심으로 덮여 씌워진다. 앞 레이어의 값 X는 각 커널 W와 곱해지고 더해진 후 상수항을 더해주어 WX + b가 된다.
이 계산값은 활성화 함수를 통과해 다음 레이어의 동일한 위치에 저장되어 레이어가 진행될 수록 비선형성이 증가한다.
Filter
여기에서 filter는 가중치이자 파라미터 값으로 미리 정해진 값이 아닌 학습된다.
CNN에서는 커널의 오차 역전파를 통해 가중치들이 학습된다.
Stride
보폭은 커널을 적용하는 거리로 보폭이 1일 경우 커널을 한번에 한 픽셀씩 이동하면서 커널을 적용한다.
보폭의 크기에 따라 feature map의 크기와 속도가 달라진다.
보폭의 크기가 클수록 학습속도가 빨라지고 feature map의 크기가 작아진다.
padding
합성곱 연산은 필터가 입력 이미지의 픽셀을 훑으며 특징을 추출하는데 이 때 필터가 이미지의 가장자리에 도달하면 가장자리는 필터가 적용할 수 있는 픽셀이 적어지므로 출력크기가 작아지고 가장자리의 데이터 영향력이 중앙부에 비해 적어진다.
이미지 주변을 특정값으로 채워 합성곱 수행 시 출력 크기를 조정하거나 경계 부분의 정보 손실을 방지하기 위해 사용된다.
pooling 계층
pooliing (= sub sampling)
입력 데이터의 크기를 줄이는 것으로 특징맵을 대표하는 값으로 압축한다.
pooling은 특징맵에서 중요한 정보를 유지하면서도 계산량을 줄이고 과적합을 방지하는데 도움을 둔다.
특히, 공간에서 물체의 이동이 있어도 결과는 변하지 않는다. 즉, 물체의 공간이동에 대하여 둔감해지게 된다는 점에서 특징의 위치의 불변성을 확보할 수 있다는 장점이 있다.
convolution layer에서는 지역정보를 추출하고 pooling layer에서는 지역 정보 중 두드러진 정보를 추출한다는 점에서 다르다.
pooling의 종류로는 최대 풀링, 평균 풀링이 있으며 이는 특징맵에서 필터 크기를 바탕으로 최대값이나 평균값을 구한 값이다.
'Azure 실습 > Azure deep learnig' 카테고리의 다른 글
OpenCV 실습 (0) | 2024.10.29 |
---|---|
Python DL 실습 4 [학습 관련 기술] (0) | 2024.10.25 |
Python DL 실습 3 [오차역전파] (0) | 2024.10.24 |
Python DL 실습 2 [신경망학습] (0) | 2024.10.23 |
Python DL 실습 1 [퍼셉트론, 신경망] (0) | 2024.10.23 |