딥러닝 텐서플로 교과서 - 5장

Jajuna_99·2022년 10월 3일
0

5장 합성곱 신경망 I

합성곱 신경망(p.142)

합성곱 신경망(이하 CNN)의 가장 큰 특징은 데이터를 받아서 처리할 때 (벡터로 변환하여) 공간적 구조를 무시하는데, CNN은 합성곱층을 추가해 이를 방지한다.
-> 이미지나 영상을 처리하는데 유용하다.

전체적인 구조 (위부터 순서대로)

  • 입력층 : 데이터를 1차원이 아닌 높이, 너비, 채널로 3차원으로 입력받는다. (채널은 그레이스케일일 때 1, 컬러면 3의 값을 갖는다.)

  • 합성곱층 : 입력 데이터에서 특성을 추출하는 역할. 커널이라는 필터를 사용하여 이미지를 훑으면서 특징을 추출하는데 이 출력값을 특성 맵이라고 한다. (스트라이드, 패딩 p.148 참고)

  • 풀링층 : 특성 맹의 차원을 다운 샘플링하여 연산량을 감소시키고, 주요한 특성 벡터를 추출하여 학습을 효과적으로 할 수 있게 한다. 최대 풀링, 평균 풀링 연산이 있다.(p.149)

  • 완전연결층 : 3차원 벡터를 1차원 벡터로 펼치고 학습하는 역할

  • 출력층 : softmax-loss를 사용한다.

필터 이동 방향의 수와 출력 형태의 따른 분류(p.152)

  • 1D CNN : 필터가 시간 축으로 (좌우) 이동하는 합성곱. 1차원 그래프 곡선 완화할 때 주로 사용.

  • 2D CNN : x, y축 두 방향으로 이동하는 합성곱. 출력은 2차원 형태이다.

  • 3D CNN : x, y, z축 세 방향으로 이동하는 합성곱. 출력은 3차원이다.

3D 입력을 갖는 2D 합성곱은 필터의 길이가 입력값과 동일하게 해서 필터가 2차원으로만 이동하게하는 합성곱이다. 대표적인 예시로는 LeNet-5VGG가 있다.

1 x 1합성곱은 필터 크기를 (1, 1, L)로 적용한 모델이다. GoogLeNet이 대표적이다.

합성곱 신경망 맛보기(p.155)

이미지 인식의 대표적인 기본 문제 MNIST 데이터셋으로 구현하기!

DNN과 CNN 두가지 방식 모두 구현하고 결과를 비교한다. 간단한 모델 만들 때 보고 참고 하기 좋을 듯 하다.

둘 다 에폭5에 같은 입력 데이터인데도 학습 시간 차이가 많이 난다...!

구름 ide 기준 (GPU 없이)
DNN = 27.3 sec
CNN = 7 min 28.3 sec

그리고 책에서는 2모델의 성능(정확도)차이가 거의 없었는데 내꺼는 CNN모델이 손실 함수도 훨씬 적고(5.1 -> 2.3) 정확도는 100%를 넘었다...!

따로 구현 설명은 하지 않고 깃헙에 올려놓았다.

전이 학습(p.164)

전이 학습(transfer learning) : (보통 거대한 데이터셋으로)이미 훈련된 모델의 가중치를 가져와 다른 과제에 보정, 적용해서 사용하는 학습

특성 추출(feature extractor) : 사전 훈련된 모델을 가져온 후 마지막에 완전연결층 부분만 새로 만드는 과정 (다른 층은 학습하지 않고, 다시 말해 이미지의 카테고리를 결정하는 부분만 학습하고 나머지는 학습되지 않도록 수정)

특성 추출은 이미지 분류를 위해 두 부분으로 구성된다.

  • 합성곱층 : 합성곱층과 풀링층으로 구성
  • 데이터 분류기(완전연결층) : 추출된 특성을 입력받아 최종적으로 이미지에 대한 클래스를 분류하는 부분

사용 가능한 이미지 분류 모델 : Xception, Inception V3, ResNet50, VGG16, VGG19, MobileNet

책에서는 ImageNet데이터셋으로 학습된 ResNet50으로 모델을 만들었다. 구현은 깃헙에!
ResNet50은 계층 50개로 구성된 합성곱 계층이다.

  • GlobalAveragePooling : flatten이 일어나기 직전 혹은 마지막 합성곱층에 적용하는 방식으로 각 특성 맵의 평균값을 벡터로 만든다. (GlobalMaxPooling은 최댓값)

역시 구현 코드는 깃헙에 있고, 주석으로 설명해 놓았다.

다른 전이학습 구현 방법으로 TensorHub도 소개해주고 구현해준다. (p.178)

설명 가능한 CNN(p.190)

설명 가능한~은 인공지능 처리 결과를 모든 사용자가 납득하고 이해하도록 제시하는 학문이다. ex) XAI

따라서, 이 절에서는 예제로 CNN의 내부 동작을 시각화 함으로서 결과를 신뢰하게 만든다.

책에서는 특성 맵을 시각화함으로서 XCNN을 구현했다. 코드 구현은 깃헙에 업로드 해놨다.

요는, 계층을 지나면 지날수록 특징 맵의 출력 결과가 이미지 본래의 특징 (픽셀의 벡터값)이 만 남게 되어 전달되는 것을 확인할 수 있다.

그래프 합성곱 네트워크(p.197)

그래프 합성곱 네트워크 : 그래프 데이터를 위한 신겨망
그래프 : 방향성이 있거나(directed) 없는(undirected)에지로 연결된 노드의 집합니다.

그래프 신경망(GNN)(p.198)

  • 인접 행렬(adjacency matrix) : 노드 nn개를 행렬 n×nn \times n으로 표현 -> 컴퓨터가 그래프를 이해할 수 있는 표현하는 과정
  • 특성 행렬(feature matrix) : 입력 데이터에서 이용할 특성을 선택 -> 각 노드가 갖는 값을 의미

그래프 합성곱 네트워크(GCN) : 이미지에 대한 합성곱을 그래프 데이터로 확장한 알고리즘
전체전인 구조 : 그래프 데이터 -> 그래프 합성곱층 -> 리드아웃(+그래프 특성) -> 완전연결층 -> 결과 도출

  • 리드아웃(readout)층은 특성 행렬을 하나의 벡터로 변환하는 함수이다. 즉, 전체 노드의 특성 벡터에 대해 평균을 구하고 그래프 전체를 표현하는 하나의 벡터를 생성한다.

GCN을 통해 그래프 형태의 데이터를 딥러닝 알고리즘에 적용할 수 있게 됐다. -> SNS에서 관계 네트워크, 학술 연구에서 인용 네트워크, 3D Mesh 등 분야에서 활용된다.

요약

어떻게 보면 피상적이고 다르게 보면 명료하다. 딱 이해하고 구현하는데 문제가 없을 정도의 정보다. 이렇게 간단한 설명이 가능한것도 텐서플로 덕분이겠지.

함수 하나하나 직접 작성한다고 생각하면 끔찍하다. 고마워요 텐서플로!

profile
Learning bunch, mostly computer and language

0개의 댓글