4장
1 역주 이 절과 다음 절에서는 텍스트 데이터셋에 기본 신경망을 적용하여 분류 작업을 합니다. 텍스트 데이터에 순환 신경망을 적용하는 방법은 11장에서 소개됩니다. IMDB 리뷰 분류 문제에 토큰화, 형태소 분석 등을 적용하는 다양한 방법은 <파이썬 라이브러리를 활용한 머신러닝(번역개정2판)>(한빛미디어, 2022)의 7장을 참고하세요.
2 역주 이 데이터셋은 스탠포드 대학교 앤드류 마스(Andrew Maas)가 수집한 데이터셋입니다(https://stanford.io/2w2NUzz).
3 역주 데이터셋의 전체 문서에 나타난 모든 단어에 고유한 번호를 부여한 목록을 어휘 사전 또는 사전이라고 부릅니다. 이런 작업은 텍스트 데이터를 다룰 때 기본적으로 수행하는 전처리 과정입니다.
4 역주 케라스에 포함된 데이터셋은 아마존 AWS S3와 (cifar10, cifar100 데이터셋의 경우) 토론토 대학교에서 내려받도록 되어 있으므로 예제를 따라 하려면 인터넷 연결이 필요합니다. 이어지는 코드에서 get_word_index() 메서드도 1.6MB 정도의 사전 데이터를 내려받습니다. 내려받은 데이터셋은 유닉스 기준으로 ~/.keras/datasets/ 폴더에 저장됩니다.
5 역주 행마다 길이가 다른 배열을 만들 수 없기 때문에 IMDB 데이터셋과 4.2절의 로이터 데이터셋의 텍스트 데이터는 파이썬 리스트를 원소로 갖는 넘파이 배열을 사용합니다.
6 역주 decoded_review의 결과는 “? this film was just brilliant casting location…”과 같습니다. train_data[0]의 첫 번째 원소가 문서 시작을 알리는 인덱스 1입니다. 여기에서 3을 뺀 값을 reverse_word_index 딕셔너리에서 찾지 못하므로 물음표로 바뀌어 나타납니다.
7 역주 가장 긴 리뷰는 2,494개의 단어로 이루어져 있으므로 훈련 데이터를 변환한 텐서의 크기는 (25000, 2494)가 됩니다.
8 역주 Embedding 층은 11장에서 자세히 소개됩니다.
9 역주 리스트가 하나의 벡터로 변환되므로 훈련 데이터를 변환한 텐서의 크기는 (25000, 10000)이 됩니다.
10 역주 중간층을 은닉 층(hidden layer)이라고도 부릅니다.
11 역주 relu의 변종들은 대부분 음수 처리 방식이 다릅니다. elu 함수는 음수를 완전히 제거하지 않고 보통 최대 -1까지 출력합니다. selu는 elu의 변종으로 이 두 함수는 activation 매개변수에 ‘elu’, ‘selu’로 지정할 수 있습니다. leaky relu는 매개변수로 지정한 값에 비례해서 음수 값을 통과시키며 ‘leaky_relu’로 지정합니다. prelu는 leaky relu의 변종으로 훈련하는 동안 비례의 정도를 학습하며 models.add(layers.PReLU())처럼 추가할 수 있습니다. 자세한 그래프 모양은 위키피디아 문서를 참고하세요(https://bit.ly/2fE7id7).
12 역주 mean_squared_error와 mean_absolute_error는 회귀 문제에 사용되는 대표적인 손실 함수입니다.
13 역주 fit() 메서드를 재호출하면 학습된 가중치에서 훈련이 이어지므로 처음부터 다시 학습하려면 모델 객체를 새로 만들어야 합니다.
14 역주 이진 분류에서 레이블이 1인 경우를 양성(positive) 샘플, 0인 경우를 음성(negative) 샘플이라고 합니다. 이 예에서는 긍정(positive)인 리뷰가 양성 샘플이지만 어떤 좋은 것이 양성 샘플이 되는 것이 아니고 예측하려는 대상이 양성이 됩니다. 예를 들어 암 진단에 관한 문제에서는 악성 종양이 양성 샘플이 됩니다.
15 역주 이 데이터셋은 원본 로이터 데이터셋(Reuters-21578, https://bit.ly/2JPwSa0)의 135개 토픽 중에서 샘플이 많은 것을 뽑아 간단하게 만든 것입니다. 이 데이터셋의 토픽은 금융과 관련된 카테고리입니다.
16 역주 로이터와 4.3절의 보스턴 주택 가격 데이터셋은 load_data() 함수에서 test_split 매개변수로 테스트 데이터의 크기를 조절할 수 있습니다. 기본값은 0.2로 전체 데이터 중 20%를 테스트 데이터로 만듭니다.
17 역주 IMDB와 로이터 데이터셋은 미리 전체 데이터셋의 단어를 고유한 정수 인덱스로 바꾼 후 훈련 데이터와 테스트 데이터로 나누어 놓은 것입니다. 일반적으로는 훈련 데이터에서 구축한 어휘 사전으로 테스트 세트를 변환합니다. 이렇게 하는 이유는 실전에서 샘플에 어떤 텍스트가 들어 있을지 알 수 없기 때문에 테스트 세트의 어휘를 이용하면 낙관적으로 테스트 세트를 평가하는 셈이 되기 때문입니다.
18 역주 to_one_hot() 함수는 labels 매개변수를 제외하고는 이전에 정의한 vectorize_sequences()와 동일합니다. train_data와 test_data는 파이썬 리스트의 넘파이 배열이기 때문에 to_categorical() 함수를 사용하지 못합니다. x_train과 x_test의 크기는 각각 (8982, 10000), (2246, 10000)이 되고 y_train과 y_test의 크기는 각각 (8982, 46), (2246, 46)이 됩니다.
19 역주 사실 train_labels와 test_labels는 정수 타입의 넘파이 배열이기 때문에 다시 np.array() 함수를 사용할 필요는 없습니다. np.array() 함수는 np.asarray() 함수와 동일하지만 입력된 넘파이 배열의 복사본을 만들어 반환합니다.
20 역주 로지스틱 회귀는 선형 회귀(linear regression)의 분류 버전으로 중간층이 없고 하나의 출력층만 있는 네트워크와 비슷합니다. 5.3.3절에 케라스로 구현한 로지스틱 회귀 모델의 예가 있습니다.
21 역주 이 데이터셋의 특성 중에는 흑인 인구 비율이 있어 최근에는 예제로 사용되지 않는 추세입니다. 특성에 대한 설명은 http://lib.stat.cmu.edu/datasets/boston을 참고하세요.
22 역주 특성의 스케일이 다르면 전역 최소 점을 찾아가는 경사 하강법의 경로가 스케일이 큰 특성에 영향을 많이 받습니다.
23 역주 정규화는 여러 가지 다른 의미로도 사용되기 때문에 오해하기 쉽습니다. 표준화(standardization)라고 하면 정확히 이 방식을 가리킵니다.
24 역주 쉽게 생각해서 훈련 데이터와 테스트 데이터를 각각 다른 스케일로 변환하게 되면 훈련 데이터에서 학습한 정보가 쓸모없게 되는 셈입니다. 마찬가지로 실전에 투입하여 새로운 데이터에 대한 예측을 만들 때도 훈련 데이터에서 계산한 값을 사용하여 표준화해야 합니다.
25 역주 사실 훈련 데이터의 통계 값으로 테스트 데이터를 전처리했듯이 검증 데이터도 훈련 데이터의 통계 값을 사용하여 전처리해야 합니다. 이렇게 하려면 앞선 전처리 과정이 K-겹 교차 검증 루프 안으로 들어와야 합니다. 사이킷런의 Pipeline 클래스를 사용하면 전처리 단계를 손쉽게 교차 검증 반복 안에 포함시킬 수 있습니다.