본문 바로가기

대학원 준비1

밑바닥부터 시작하는 딥러닝 7장 정리

< 이 챕터에서 알아볼 것 >

7.1 CNN의 기원과 전체 구조

7.2 합성곱 계층과 풀링 계층 설명

7.3 합성곱 계층과 풀링 계층 구현

7.4 CNN 구현

7.5 CNN 시각화

7.6 대표적인 CNN

 

 

7.1 CNN의 기원과 전체 구조

 

 

같은 손글씨 5이나, 약간의 변화가 생겨도 1차원으로 바꿀시 값이 완전 바뀐다

 

-  이 때, 고양이의 시각 인식방법을 알아보았더니, 고양이는 하나의 시야엔 시각피질 내의 여러 세포들이 각 부분을 담당해서 인지하고, 이 세포들이 계층들을 지날수록 합쳐져서 하나의 시야를 인지하더라

 

어떤 뉴런은 수직선의 이미지에만 반응하고, 어떤 뉴런은 다른 각도의 선에 반응한다. 이렇게 저수준의 패턴(edge, blob )이 조합되어 복잡한 패턴(texture, object)에 반응하다는 것을 알게 되었다

 

그래서 이미지 자체에서 특징을 추출하고, 특징들간의 패턴에 대해 알아낸 뒤 FNN에 넣어서 학습을 하자는 것이 CNN의 발상

 

 

비유하자면 다음과 같다

왼쪽은 원본이미지, 오른쪽은 시각피질이다.

 

시각피질이 원본이미지에 대해 반응한 경우, 이러한 원본이미지의 일부에 대해 인식을 하고 

 

최종적으로는 일부 이미지들을 합쳐서 다음과 같이 원본 이미지를 인식하게 된다

 

 

 

 

그림 출처 : https://ai.stanford.edu/

 

7.2 합성곱 계층과 풀링 계층 설명

 

 

 

 

 

그림에서, 3차원 입력 데이터 하나와 3차원 필터 하나를 합성곱 연산시, 2차원 출력 데이터 하나가 나왔는데,

2차원 출력 데이터를 여러 개 얻고싶으면, 필터를 여러장 쓰면 된다. (그 결과 2차원 데이터가 여러장 있으니 3차원

데이터가 된다)

 

 

-입력 데이터 배치처리시, 입력 데이터도 4차원이 됨

 

 

7.3 합성곱 계층과 풀링 계층 구현

im2col 함수란?

필터를 적용시켜서 연산하는 것이 아닌, 필터의 크기만큼, 앞의 입력 데이터의 채널에 대해 1열로 나열시킨,

   다음 채널에 대해 나열함으로써, 3차원 데이터를 2차원 데이터로 바꿔주는 함수

입력 데이터가 배치처리 되있으면, 행렬화 한 값의 아래에 행렬화를 나열해줌

입력 데이터를 행렬화 했으면, 필터들도 행렬화 해줘야 함. , 필터의 행렬화는 reshape 함수를 쓰고, 행렬 곱셈을

   위해서 전치해야함

 

 

 

 

 

 

7.4 CNN 구현

 

 

 

 

7.4 CNN 시각화

 

 

7.5 대표적인 CNN

 

 

 

정리하면...

Q1) 필터를 여러개 쓰는 이유?

A: 여러 특징들을 추출하기 위해. 여러 특징들을 추출해야 객체의 클래스를 추론하는데 정확도가 높아짐

 

Q2) 여러 필터를 만드는 방법?

A: 필터들을 랜덤하게 초기화 하면, 랜덤값 -> 특징 으로 변화한다. 이때 랜덤값이 여러개니까 특징도 여러개가 됨

 

Q3) 고양이 시각 인식 방법에서 특징맵들이 나오는데 특징맵을 합치는 방법?

A: Conv, Pool 계층들을 통과시키다가 마지막에 FC (Fully Connected) 계층을 써서 특징맵들을 합쳐줌

 

Q4) Pooling 계층이 필요한 이유?

A: 특징에 반응하는 부분은 많지 않으므로 반응하지 않은 부분(값이 작다)을 제거해줌으로써 연산의 효율 증가

 

Q5) 왜 필터는 점점 고차원 정보(객체의 일부)에 반응하게 되는가?

A: 여러 계층들을 지나면서 특징들에 대한 특징맵들이 나오고, 이걸 결합해서 하나의 객체를 만든 뒤 객체의 클래스를

    판별했었다.  학습이 완료됬을때 역전파가 전파되면 제일 마지막 계층의 역전파는 실제 객체와의 오차값인데,    

    그 결과 역전파되는 값은 고차원 정보(추론 객체와 실제 객체의 차이) -> 저차원 정보가 되기 때문

 

Q6) 필터들을 지날수록 왜 단순한 특징들이 조합된 복잡한 특징이 만들어 지게 되는가?

A: W1에 의해 생긴 특징맵이 W2에 반응하게 되므로 W2와 W1간에 차원적 관련성이 있기 때문