4장
1 컴퓨터 비전은 그 자체로 광범위한 분야로, 머신 러닝 기술을 사용하지 않는 영역은 이 책의 범위를 넘어섭니다.
2 딥러닝 분야의 컴퓨터 비전에 관심 있고 이 분야를 깊이 탐구하고 싶은 독자는 Mohamed Elgendy의 <Grokking Deep Learning for Computer Vision>(Manning, 2020)을 참고하세요.
3 역주 일반적으로 이미지 뷰어나 편집기에서 이미지를 다룰 때와 달리 텐서나 배열로 이미지를 다룰 때는 2차원 배열의 행에 해당하는 이미지의 높이 차원이 먼저 등장합니다.
4 다른 방법으로 이미지의 픽셀과 그 컬러 값을 모두 1D 텐서(1차원 숫자 배열)로 펼칠 수 있습니다. 하지만 이렇게 하면 각 픽셀의 컬러 채널 사이의 연관성과 픽셀 간의 2D 공간상의 관계를 활용하기 힘듭니다.
5 역주 일반적인 흑백 이미지라면 흰 바탕에 검은 글자를 생각할 수 있습니다. 컴퓨터는 검은색을 0, 흰색을 255로 나타내기 때문에 글자 부분의 픽셀 값이 0이 되어 신경망이 글자 모양을 학습하기 어렵습니다. 이 때문에 신경망에 흑백 이미지를 주입할 때는 반전시켜 글자(전경)가 흰색에 가깝게 하고 배경을 검은색으로 만듭니다. 왼쪽 그림은 0~255의 픽셀 값을 0~1 사이로 정규화한 것입니다.
6 역주 크기가 1인 차원은 전체 배열의 원소 개수에 영향을 미치지 않습니다. 예를 들어 크기가 [8, 8, 1]인 배열과 [8, 8] 크기의 배열은 모두 64개의 원소를 가집니다. 흑백 이미지의 경우 2D로도 충분하지만 합성곱 신경망을 사용하려면 3D로 만들어야 합니다.
7 MNIST는 Modified NIST를 의미합니다. 여기서 ‘NIST’는 이 데이터셋이 1995년 미국 국립표준기술연구소(US National Institute of Standards and Technology)에서 유래되었다는 사실을 반영합니다. 이름에 있는 ‘modified’는 원본 NIST 데이터셋에 수정을 가했다는 의미입니다. 1) 훈련 세트와 테스트 세트를 균일하게 만들기 위해 안티 앨리어싱(anti-aliasing) 처리하여 이미지를 동일한 28 × 28 픽셀 비트맵 이미지로 정규화하고 2) 글씨 작성자가 훈련 세트와 테스트 세트에 동시에 등장하지 않도록 합니다. 이런 수정 덕분에 이 데이터셋을 다루기 쉬우며 모델 정확도를 객관적으로 평가하기 좋습니다.
8 Yann LeCun, Corinna Cortes, and Christopher J.C. Burges, “The MNIST Database of Handwritten Digits,” http://yann.lecun.com/exdb/mnist/.
9 역주 번역서 데모 사이트(http://ml-ko.kr/tfjs/mnist)에 브라우저로 접속하여 바로 실행해 볼 수 있습니다.
10 역주 시퀀셜 모델은 tf.Sequential() 클래스로 만든 텐서플로 모델을 말합니다. 이 클래스는 층을 순서대로 쌓은 신경망 모델을 만듭니다. tf.sequential()은 단순히 tf.Sequential() 클래스 객체를 생성하여 반환하는 함수입니다. 5장에서 시퀀셜 모델 외에 다른 방법으로 텐서플로 모델을 만드는 방법을 소개합니다.
11 역주 이 장에서는 편의상 합성곱 층이 이미지를 출력한다고 언급하지만, 합성곱 층이 특성을 추출하는 기능을 가지고 있다는 점에서 합성곱 층의 출력을 일반적으로 특성 맵(feature map)이라고 부릅니다. 특성 맵을 시각화하는 예는 7장에서 볼 수 있습니다.
12 이 비유는 Ashi Krishnan의 ‘Deep Learning in JS’(JSConf EU 2018: http://mng.bz/VPa0)에서 가져왔습니다.
13 역주 합성곱 층은 일반적으로 여러 개의 필터를 사용하며 이런 필터를 합쳐서 커널이라 부릅니다. 하지만 종종 필터와 커널, 가중치를 구분하지 않고 혼용해서 사용하기도 합니다. 그림 4-3에는 표현되어 있지 않지만 합성곱 층에서는 필터마다 하나의 편향이 있습니다.
14 역주 strides 매개변수에는 커널이 슬라이딩할 때 한 번에 이동하는 크기를 지정합니다. kernelSize와 strides의 높이와 너비 방향 크기가 동일하면 코드 4-1에서처럼 하나의 정수로 지정할 수 있습니다. strides의 기본값은 1입니다.
15 역주 conv2d 층의 padding 매개변수 기본값이 'valid'로, 커널이 입력 이미지 밖으로 슬라이딩하지 않습니다. 이런 경우 출력은 입력보다 작아집니다. padding 매개변수가 'same'일 경우 출력 크기가 입력과 동일해지도록 입력 이미지 주위에 0 픽셀이 패딩됩니다. 이에 대한 예는 9장에서 볼 수 있습니다.
16 역주 kernelSize, strides와 마찬가지로 높이와 너비 크기가 같을 경우 poolSize를 하나의 정수로 설정할 수 있습니다.
17 역주 일반적으로 풀링 층은 입력 이미지 위를 겹쳐서 슬라이딩하지 않습니다. 따라서 스트라이드는 항상 풀링 크기와 같도록 설정하게 됩니다. maxPooling2d 층에서 strides 매개변수를 지정하지 않으면 poolSize와 같게 설정됩니다.
18 역주 또는 이동 불변성(translational invariance)이라고도 합니다.
19 역주 두 합성곱 층의 커널 크기가 3이고 스트라이드가 1일 때 5 × 5 입력이 첫 번째 합성곱 층에서 3 × 3이 되고 두 번째 합성곱 층에서 1 × 1이 됩니다.
20 역주 커널과 스트라이드 크기가 앞에서와 동일하면 8 × 8 입력이 첫 번째 합성곱 층에서 6 × 6이 되고, 풀링 층에서는 절반으로 줄어들기 때문에 3 × 3이 됩니다. 이 출력이 두 번째 합성곱을 통과하면 1 × 1이 됩니다.
21 역주 사실 flatten 층은 텐서를 1차원으로 바꾸는 것이 전부이지만, 텐서플로에서는 tf.layers 아래에 있기 때문에 층으로 부릅니다.
22 TensorFlow.js의 저수준 API를 사용해 텐서를 만드는 자세한 튜토리얼은 부록 C를 참고하세요.
23 Dan Oved, “Real-time Human Pose Estimation in the Browser with TensorFlow.js,” Medium, 7 May 2018, http://mng.bz/ZeOO.
24 역주 드롭아웃 알고리즘은 원래 신경망 층의 유닛을 끄는 것입니다. 배치 입력의 경우 샘플마다 다른 유닛을 끄는 것보다 랜덤하게 샘플을 선택해 0으로 만드는 것이 간단합니다. 역전파될 때는 입력 원소가 0인 가중치는 업데이트되지 않습니다(그림 2-9 참조).
25 역주 드롭아웃이 적용된 층은 추론 단계에서 훈련 때보다 더 많은 유닛을 사용하기 때문에 출력이 커집니다. 따라서 이를 보정하기 위해 (1-rate)를 곱해야 합니다. 텐서플로 같은 경우 훈련할 때 (1-rate)로 나누어 드롭아웃되지 않은 유닛의 출력을 높입니다. 두 번째 방식이 첫 번째와 완전히 같지는 않지만, 실전에서 잘 동작하며 추론 단계에서 추가 연산이 필요하지 않은 장점이 있습니다.
26 역주 붓꽃 예제의 경우 훈련된 모델을 저장하기 위해 IndexedDB를 사용합니다.
27 역주 훈련된 모델을 이 디렉터리에 저장하려면 node main.js --model_save_path /tmp/tfjs-node-mnist와 같이 사용합니다. 제공되는 모든 옵션을 보려면 node main.js --help를 사용하세요.
28 역주 붓꽃 예제의 loader.js 파일에서 tf.loadLayersModel() 함수의 예를 볼 수 있습니다.
29 Ronan Collobert, Christian Puhrsch, and Gabriel Synnaeve, “Wav2Letter: An End-to-End ConvNet-based Speech Recognition System,” submitted 13 Sept. 2016, https://arxiv.org/abs/1609.03193.
30 역주 conv1d 층은 1D 텐서를 사용해 합성곱을 수행합니다. 이에 대한 예는 9장에서 볼 수 있습니다.
31 역주 번역서 데모 사이트(http://ml-ko.kr/tfjs/speech-commands)에 브라우저로 접속하여 바로 실행해 볼 수 있습니다.
32 역주 브라우저에서 처음 예제를 시작하면 브라우저가 마이크 사용 권한을 요청하는 팝업을 띄웁니다. 이 권한을 허락해야 브라우저에서 음성 데이터를 처리할 수 있습니다.