본문 바로가기
공부/<파이썬으로 만드는 인공지능>

Ch 6 컨볼루션 신경망과 컴퓨터 비전

by 푸딩코딩 2023. 10. 29.
728x90
반응형

6.1 컨볼루션 신경망의 동기와 전개

감각 기관을 구성하는 수용장을 모방한 딥러닝 모델 컨볼루션 신경망(CNN)

*컨볼루션+강화학습 결합을 통해 인공지능을 만들기도 한다. ex) 알파코, 화면영상분석: 컨볼루션 신경망, 게임 전략: 강화학습

 

6.2 컨볼루션 신경망의 구조와 동작

convolution: 신호에서 특징을 추출하거나 신호를 변환하는 데 사용하는 연산으로, 신호 처리, 영상 처리, 컴퓨터 비전 등에 널리 쓰인다. 수용장과 커널의 선형 결합으로, 커널을 이동하면서 계산을 수행하면 특징 맵을 얻는다.  입력과 같은 크기의 특징 맵이 생성되기 때문에 정보 손실이 없다. 

수직 에지 특징 추출 커널: 

-1 0 1

-1 0 1

-1 0 1

 

수형 에지 특징 추출 커널:

1 1 1

0 0 0

-1 -1 -1

 

특징 맵 추출: 컨볼루션 망

요약 통계량 구하기: 풀링층

 

 

패딩: 컨볼루션층을 쌓으면 가장자리에서는 연산을 할 수 없어 데이터의 크기가 작아지기 때문에, 0이나 same으로 덧대기(padding, 패딩)해준다. 

 

보폭(stride, 스트라이드): 입력 영상이 아주 큰 경우 사이즈를 줄이는 방법. 커널을 적용하는 간격을 설정하는 것으로, 보폭을 k로 설정하면 특징 맵의 크기는 1/k가 된다. 

 

바이어스: 커널에는 바이어스가 존재한다. 하나의 scalar 값을 가져 모든 셀에 더해준다. (편향은 매개변수 개수에 포함되어서 +1해주어야함)

 

커널의 개수: 커널이 하나 뿐일 경우 한 종류의 특징만을 추출하기에 특징이 빈약해진다. 영상은 변화무쌍하기에, 커널을 64개나 128개와 같이 많이 사용하여 풍부한 특징 맵을 생성한다. 

 

활성 함수: 컨볼루션층은 특징맵에 활성함수를 적용한다. 주로 ReLU(음수는 0으로, 양수는 그대로)

 

풀링층: 특징 맵의 지나친 상세함을 줄여 요약 통계량을 추출하고, 메모리 효율과 계산 속도를 상승시킨다. 보폭을 s로 설정하면 1/s크기의 특징 맵이 된다. 일반적으로 2의 보폭을 가진다. 

최대 풀링은 커널 안의 화소에서 최대값을 찾는것이고, 평균 풀링은 평균을 취한다. 

 

부분 연결&가중치 공유: MLP는 모든 노드들이 완전연결을 하지만, 컨볼루션 모델에서는 부분연결을 하여 가중치를 적게 가진다. MLP에서는 노드를 연결하는 에지에 가중치(매개변수)가, 컨볼루션 신경망에서는 커널을 구성하는 화소 하나하나가 가중치(매개변수)이다. 입력 영상의 모든 곳에 같은 커널을 적용하므로, 매개변수의 개수가 크게 줄어든다. 

 

 

컨볼루션 연산으로 추출된 특징 맵은, 다음 빌딩 블록의 입력 텐서로 쓰인다. 

 

 

6.3 컨볼루션 신경망의 학습

손실 함수: 신경망이 범하는 오류를 측정. 신경망의 출력 예측 값과 레이블 값(정답)과의 차이를 측정한다. 

옵티마이저: 손실함수의 최저점을 찾아 매개변수가 어느 방향으로 변해야 손실 함수를 최저점에 가까워질 수 잇는지 알아낸다. 손실함수를 매개변수로 미분하여 방향을 알아낸다.

 

딥러닝은 특징 추출과 분류를 동시에 학습으로 알아낸다. 또한 입력 패턴에서 최종 출력에 이르는 전체 과정을 한꺼번에 학습하는 통째 학습을 한다. 컨볼루션 학습도 이를 따른다. 

 

컨볼루션층&풀링층: 특징 추출

완전연결층: 분류

 

오류 역전파 알고리즘을 사용한다. 완전연결층의 가중치와 컨볼루션층의 커널을 매개변수로 하여 최적화한다. 일반적으로 커널은 난수로 초기화하며, 오류를 줄이는 방향으로 커널과 가중치를 개선하며 최저점으로 수렴한다. 

 

컨볼루션 신경망의 특징

1. 통째 학습을 하여 특징 추출과 분류를 동시에 최적화한다. 

2. 특징 학습을 하여 주어진 데이터셋에 최적인 특징 추출 알고리즘을 학습으로 알아낸다. 

3. 신경망의 깊이를 더욱 깊게 하여 풍부한 특징을 추출한다. 부분 연결성과 가중치 공유로 인해 매개변수의 개수는 적으나, 신경망의 깊이를 깊게하면 학습이 잘 된다. 수십~수백 층을 사용하는 모델도 있다. (절대적으로 층이 깊은 게 좋다고 할 수는 없지만)

4. 데이터의 원래 구조를 그대로 유지한 채 특징을 추출한다. DMLP에서는 영상을 1차원으로 펼쳐 입력하여 이웃 정보가 손실되는 것과 대조적.

 

 

6.4 컨볼루션 신경망 프로그래밍

tensorflow의 keras 사용

 

*complie에서 metrics는 평가 척도로 일반적으로 accuracy사용, 

*fit에서 batch_size는 데이터셋을 배치 사이즈로 분할할 때의 크기로 하드웨어에 효율적으로 메모리 할당을 할 수 있는 2의 제곱수 사용, 데이터셋이 batch_size로 나누어 떨어지지 않더라도 마지막에는 나머지만을 묶어서 쓰기 때문에 연산하지 않는다. validation_data는 학습 중 모델을 검증하는 데이터로 train데이터의 일부를 사용하거나, test 데이터를 사용하지만, test데이터는 모델 평가시에만 쓰는 것이 좋기 때문에 검증 데이터로 사용하는 것은 권장되지 않는다.  

 

 

드롭아웃은 활성 함수처럼 층의 출력에 연산을 적용하는 역할로 층으로 볼 수 없다. 

 

model 클래스에서는, 일반적으로 Sequential()을 사용하며, 출력층이 여러 개인 경우(주로 시계열 데이터) functional API를 사용한다. 

 

sequential로 모델 객체 생성, add로 층 쌓기, compile로 학습 방법 지정, fit으로 학습, evaluate로 모델 성능 측정

 

save하면, 학습을 마친 모델을 저장할 수 있고 신경망의 구조 정보와 가중치 정보를 저장한다. 

 

 

6.5 컨볼루션 신경망의 시각화

설명 가능 인공지능?

커널 시각화와 특징 맵 시각화

 

6.6 딥러닝의 규제

매개변수가 많으면 과잉 적합에 빠질 수 있는데, 신경망을 작게 만들지 않고 다른 규제 방법을 통해 이를 방지할 수 있다

 

규제 기법(과적합 규제)

1. 데이터 증대: 가장 확실한 방법으로 큰 훈련 집합(데이터)을 사용하는 것이다. 하지만 많은 시간과 비용이 들기에, 인위적인 방법인 데이터 증대(영상의 경우 영상을 상하좌우 조금씩 이동시키거나 명암 조절 등으로 영상 개수 늘리기) 

2. 드롭아웃: 일정 비율의 가중치를 임의로 선택해 계산에 참여하지 못하는 불능으로 만들어 학습함. 매우 효과적. 트레인 데이터에 대해는 정확도 낮아질지라도, 일반화가 좋아져 테스트데이터에서 정확도가 높아진다. 

3. 가중치 감쇠: 큰 가중치 값이 과잉 적합을 발생하니, 성능을 유지한 채 가중치의 크기를 낮추는 것. 절댓값/제곱을 사용할 수 있으며 가중치/바이어스/활성함수에 적용할 수 있다. regularizer로 사용.

 

성능평가방법: 교차검증(여러 번 반복하고 결과(정확도) 평균 사용/제거조사(옵션을 하나씩 빼보며 테스트)

 

 

6.7 전이 학습

어떤 도메인에서 수집한 데이터로 학습한 모델을 다른 도메인의 데이터를 인식하는 데 활용해 성능을 향상하는 연구 주제. 

-> 쉽게 말해서 기존에 학습된 모델을 다른 데이터에 적용해 보는 것. 

데이터가 적은 경우나, 시간 축소에 유용하다. 특성이 비슷한 적절한 모델을 선택하는 것이 좋다. 

학습률을 수정해가며 적절한 학습을 조절한다.

 

 

6.8 물체 검출

YOLO

728x90
반응형