[정오표] 파이썬 날코딩으로 알고 짜는 딥러닝

Last updated : 2019-09-10


『파이썬 날코딩으로 알고 짜는 딥러닝』 1쇄에 있는 수정자를 정리한 정오표입니다. 모두 2쇄에 반영했습니다. 1쇄를 구매하신 독자께서는 참고 바랍니다. 모든 독자께 감사드립니다.

윤덕호 저자님의 깃허브에서는 더 빨리 수정자를 만나보실 수 있습니다.

[39쪽 6째 줄]

        일부 이터의 경우 → 일부 이터의 경우

[40쪽 그림]

        축삭 (2번 나타난 것 중 왼쪽) 축삭 → 세포체 축삭

        가지돌기 축삭말단

        하단에 축삭돌기 표현 삽입

        

[41쪽 9째줄]

        무수히 붙은 가지돌기를 → 무수히 붙은 축삭말단을

[42쪽 그림 아래 4째줄]

        각 수상돌기로부터 들어오는 → 각 가지돌기로부터 들어오는

[51쪽 마지막줄]

        3장에서 살펴본다. → 4장에서 살펴본다.

[55쪽 그림 왼쪽 그림]

        너 올해 몇 살이? → 너 올해 몇 살이?

[61쪽 2째 줄]

        몸시 어렵지만 → 몹시 어렵지만

[70쪽 그림에서]

        abablone_exec() → abalone_exec()

[71쪽 1.10.3 첫 코드 아래 설명문 첫 줄]

        load_ablone_dataset() → load_abalone_dataset()

[78쪽 3째 줄에서]

        순전파 첫 단계인 backprop_neuralnet() → backprop_neuralnet()

[78쪽 1.10.9절 본문 첫 줄]

        신경 부분에 대해 → 신경 부분에 대해

[94쪽 오른쪽 그림의 맨 아래 말풍선]

        
0.270 →
=0.270

[96쪽 글상자 본문 3째 줄]

[101, 2.6절 전체적으로 P, Q를 맞바꾸도록 수정]

        101쪽 2째 줄: 추정 확률 분포 Q가 있고 → 추정 확률 분포 P가 있고

        101쪽 3째 줄: 미지의 확률 분포 P가 → 미지의 확률 분포 Q

        101쪽 4째 줄: Q를 꾸준히 수정함으로써 → P를 꾸준히 수정함으로써

        101쪽 5째 줄: 확률 분포 Q를 확률 분포 P에 → 확률 분포 P를 확률 분포 Q

        101쪽 8째 줄: 애당초 확률 분포 P를 → 애당초 확률 분포 Q

        101쪽 9째 줄: 확률 분포 P는 → 확률 분포 Q

        101쪽 12째 줄: 데이터로부터 확률 분포 P를 → 데이터의 확률 분포 Q

        101쪽 15째 줄: P는 고정된 확률 분포가 → Q는 고정된 확률 분포가

        101쪽 18째 줄: 조건부 확률 분포 P로 → 조건부 확률 분포로 P를

        101쪽 22째 줄: 추정 확률 분포 Q가 → 추정 확률 분포 P

[104쪽 글상자 수식 2~4째 줄, 5군데]

[119-120쪽 2.11.4절 코드 내부]

        119쪽 코드 8째 줄: fn = np.sum(..., ans_yes)) → fn = np.sum(..., ans_no))

        119쪽 코드 9째 줄: tn = np.sum(..., ans_no)) → np.sum(..., ans_yes))

        120쪽 코드 3째 줄: recall = safe_div(tp, tp+fn) → recall = safe_div(tp, tp+tn)

[123쪽 본문 6~9째 줄]

        데이터셋에서 데이터 간의 균형이 중요하다는 점과 정확도가 아닌 다른 성능 지표를 활용하는 것이 매우 유용함을 알 수 있다.

앞으로 소개할 여러 데이터셋이나 신경망에서 이 두 문제를 다시 다루지는 않겠지만 신경망을 실제 문제에 적용할 때 이런 점을 함께 고려하면 많은 도움이 될 것이다.

         →

끝으로 본 단원 내용에 남은 한 가지 문제를 지적하자. 2.11.3절에서 부족한 펄서 데이터들을 복사해 별 데이터와 같은 개수로 채우고 나면 같은 내용의 데이터가 학습용 데이터와 평가용 데이터 양쪽 모두 이용될 수 있다. 이는 8장에서 소개할 과적합 현상을 초래하여 올바른 학습을 방해하는 원인이 될 수 있다. 아쉽지만 이 문제의 해결은 독자 각자에게 맡긴다.

[144쪽 9째 줄]

        10-10을 사용한다.

                 →

        10-10을 사용한다. 한편 labels가 원-핫 벡터라는 전제를 두면 계산식 ❹를 정답 위치의 로그값만 계산하도록 간단하게 고칠 수 있다. 하지만 labels 형태에 원-핫 벡터라는 제약이 필요하므로 여기에서는 이용하지 않았다..

[277쪽 11째 줄, 즉 3번째 수식 오른쪽]

[346쪽 코드 8~13째 줄]

        이어서 순전파 처리를 담당하는 forward_dropout_layer() 메서드에서는 ➍에서 np.random.binomial() 함수를 이용하여 pm['keep_prob']의 확률로 1, 나머지 확률로 0의 난수들을 x와 같은 형태로 발생시키고 ➎에서 이렇게 생성된 dmask를 x에 곱해 일부 원소들을 0으로 만들어 이후의 의사 결정 과정에서 배제하도록 한다. 이 처리는 학습 단계에서만 수행되어야 하므로 is_training 플래그를 검사하며, pm['keep_prob']로 나누어 기댓값을 유지시키고 dmask를 역전파용 보조 정보로 전달한다.

                →

        ➍의 순전파 처리에서는 pm['keep_prob']의 확률로 1, 나머지를 0으로 x와 같은 형태의 난수들을 발생시켜 드롭아웃 마스크를 만들고 ➎에서 이 마스크를 x에 곱해 일부 원소들을 0으로 만들어 이후의 처리 과정에서 배제시킨다. 그런데         ➍의 마스크는 x.shape 대신 x.shape[1:] 형태로 지정해 미니배치 단위로 일괄 처리하는 편이 더욱 효과적인데 이 점은 각자 확인해보자. 한편 드롭아웃 처리는 학습 단계에서만 수행되어야 하므로 is_training 플래그를 검사하며, pm['keep_prob']로 나누어 기댓값을 유지시킨다.