티스토리 뷰
3. Convolutional Networks / L2. Convolutional Neural Networks - Local Connectivity
chrisysl 2018. 9. 5. 22:03Local Connectivity
- MLP를 이용해서 손으로 쓴 숫자 이미지를 decode하였는데
- MLP에 그레이스케일 이미지를 돌리기 전, 먼저 행렬을 벡터로 변환해주어야 했다.
- 그럼 이렇게 변환된 벡터는 hidden layer가 2개인 MLP의 input으로 들어갔고
- 이 모델은 MNIST 데이터셋을 가지고 이미지를 분류하는데에 매우 적절한 모델이었음을 확인하였다.
- 앞의 모델은 Test image에 대해 2% 보다 낮은 수치의 에러를 산출해냈는데,
- MNIST 데이터셋과 같이 딥러닝 학습을 위해 완벽히 준비된 데이터가 아니라
- 실제 현실세계의 데이터 즉, 더 난잡한 이미지와 더 복잡한 패턴들을 처리할 경우 다른 기술을 사용하여야 한다.
- 이번엔 CNN에 한 발 더 가까워 지고자
- MLP를 사용하여 이미지 분류를 수행할 때 직면하는 몇몇 단점과 한계를 제거하여 학습을 진행해보자.
- 특히 두가지 이슈를 제어해볼 것인데,
- 먼저, MLP는 매우 많은 인자를 사용한다.
- 바로 이전 28 by 28 이미지들은 수백만의 인자들을 가지고 있었다.
- 그 직전 연산에 대해 계산복잡도를 고려해보면, 학습에 매우 적합한 이미지일지라도 상당히 복잡하다는 것을 알 수 있다.
- 그 다음으로, 2D 이미지를 벡터로 직렬화 하게되므로써 이미지가 갖는 고유한 정보를 온전히 사용할 수 없다는 점이다.
- 이러한 공간적인 정보나 픽셀간의 거리에 따른 관련성 등은 모델이 이미지를 이해하는데에 도움을 줄 뿐 아니라
- 픽셀 값들에 대한 패턴을 명확하게 하는데에 큰 도움을 주는 정보들이다.
- 따라서 이러한 2차원적 정보를 유지하여 사용하려면 전적으로 다른방식으로 접근을 해야한다.
- CNN은 레이어간의 연결데이터가 2차원 이미지 행렬로 주어지는 경우,
- 상대적으로 드물게 연결되는 레이어를 사용하여 이런 문제들을 해결한다.
- 게다가 CNN은 행렬 자체를 input으로 받아들인다.
- 설명의 용이성을 위해 손글씨로 쓴 7 이미지를 위와같이 간소화하면
- input으로 들어온 이미지가 flatten되어 단일벡터로 구성이 되고, 4개의 hidden layer를 거쳐
- 0 ~ 9 사이의 결과값 중 하나이므로 one-hot encoding 된 output layer에서 위의 이미지가 나타내는 숫자를 확률로 나타낸다.
- 위의 그림을 확인해보면 7에 해당하는 one-hot encode의 확률이 가장 높게 나오고있음을 알 수 있다(0.8).
- output layer에서 7이라고 말하고 있는 상황에서 다시 MLP의 구조를 확인해보자.
- 모든 hidden node가 원본 이미지의 모든 픽셀에 연결되어야만 할까?
- 위 구조대로라면 이미 중복된 과정이 많이 일어나고있다.
- 위와같이 빨, 초, 노, 파 로 영역을 나눠 각 색깔마다 하나의 hidden node만이 연결될 경우
- 이전에 비해 하나의 노드는 1/4에 해당되는 픽셀에만 연결된다.
- 이렇게 영역을 나눠 특정 영역을 담당하는 노드만을 연결해주는 방식은
- 특정 노드가 담당한 그 영역의 이미지에 대한 패턴만을 찾아낸다.
- 그리고 각 노드는 output layer에게 자기 영역에서 찾아낸 패턴을 알려주고
- output layer는 영역별로 찾아낸 패턴을 조합하여 최종 결과를 찾아낸다.
- 이를 locally connected layer 라고 부르며, 각 노드마다 전체 이미지가 연결되었던 구조보다
- 훨씬 적은 파라미터만을 필요로 한다.
- 이렇게 local connection을 이용하면 over-fitting될 확률을 줄일 수 있고,
- 노드에게 있어 패턴에 대한 이해를 훨씬 수월하게 한다.
- 이 벡터들을 행렬로 재배열하게 되면, 각 레이어의 노드간의 관계가 더 명확해진다.
- local connection을 이용하여 hidden layer를 더 추가하면, 선택적으로 또 연속적으로 패턴을 찾아낼 수 있다.
- 직전 미니 프로젝트에서 단순히 hidden layer의 수를 늘리게 되면, 복잡도가 급격하게 증가하는것을 알 수 있었다.
- 하지만 이렇게 locally connected 된 hidden layer를 사용한다면, 가중치를 공유할 뿐 아니라
- 여러 중복연산을 최소화 하며 해당 영역에 대한 패턴만을 뽑아내므로 정확도도 높아지게 된다.
- local connection의 아이디어는 이미지 내의 각기 다른 영역이 가중치와 같은 동일한 정보를 공유하는 것이다.
- 따라서 이미지를 이해하는데 필요한 모든 패턴이 이미지 내의 어느곳에서건 나타날 수 있다.
- 신경망 네트워크가 이미지를 분류하는데에 있어 파라미터들을 공유하는것이 얼마나 도움이 될 지는
- 고해상도 이미지를 통해 예를 들어보면 쉽게 파악할 수 있다.
- 사진 내에 고양이가 독립적으로 임의의 위치에 존재한다 가정해보자.
- 이 경우 특정 객체가 그림의 왼쪽에 있건 오른쪽에 있건 동일하다는 것을 네트워크에게 명시적으로 알려줘야한다.
- 이는 가중치를 공유하게되면 부분적으로 구현할 수 있다.
- 이러한 개념들은 convolutional layer에 대한 필요성을 보여준다.