Do it! 딥러닝 입문

x9791163031093

★★★★★ 딥러닝을 배우고자 하는분께 강추합니다!(wtiger85 님)
★★★★★ 강추. 박해선님의 책은 일단 지른 다음에 생각합니다.(heistheguy 님)
♥♥♥♥ 코랩을 사용한 딥러닝을 알려주는 책 매우 유용합니다.(su**rss007 님)

Do it! 정직하게 코딩하며 배우는 딥러닝 입문’은 제가 쓴 첫 번째 책입니다.

여러 권의 머신러닝, 딥러닝 책을 번역하면서 배웠던 장점을 최대한 살리고 독자로서 아쉬웠던 점을 보완하려고 노력했습니다. 책 뿐만 아니라 수 많은 논문, 블로그, 질문-답변, 깃허브 코드, 동영상 등을 통해 배웠습니다. 이런 자료가 없었다면 아무것도 할 수 없었을 것입니다. 지식을 나눠주신 모든 분들께 깊이 감사드립니다.

입문서로서 이론과 코드를 적절히 안배하려고 노력했습니다. 선형 회귀부터 순환 신경망까지 역전파 알고리즘을 유도하는 과정을 그림과 수식으로 안내합니다. 그다음 파이썬으로 직접 구현하면서 수식을 이해할 수 있도록 돕습니다. 마지막으로 텐서플로를 사용하여 실전 사례를 맛볼 수 있도록 꾸몄습니다. 이 모든 작업을 아무런 설치 없이 브라우저만 사용하여 진행할 수 있습니다. 수식과 개념을 설명하기 위해 많은 그림을 넣었습니다. 훌륭한 일러스트로 채워주신 이지스퍼블리싱 출판사에 감사드립니다.

이미 많은 입문서가 있지만 독자들에게 기초적인 내용을 올바르게 전달하고 싶었습니다. 한 번 쓰고 마는 책이 아니라 꾸준히 좋은 내용을 계속 채워 넣겠습니다. 이 책을 통해 성공적으로 딥러닝에 입문하시길 응원합니다! 감사합니다!

  • 혼자 공부하시는 분들을 위해 유튜브 강의를 올렸습니다. 재미있게 봐 주세요! 🙂
  • 이 강의는 구름 에듀에서도 볼 수 있습니다.


목차

01 딥러닝을 소개합니다
02 최소한의 도구로 딥러닝을 시작합니다
03 머신러닝의 기초를 다집니다 ― 수치 예측
04 분류하는 뉴런을 만듭니다 ― 이진 분류
05 훈련 노하우를 배웁니다
06 2개의 층을 연결합니다 ― 다층 신경망
07 여러 개를 분류합니다 ― 다중 분류
08 이미지를 분류합니다 ― 합성곱 신경망
09 텍스트를 분류합니다 ― 순환 신경망


  • 온라인/오프라인 서점에서 판매중입니다. [교보문고] [Yes24] [알라딘]
  • 328페이지, 19,800원 –> 17,820원, 전자책: 13,000원
  • 이 책에 실린 코드는 깃허브에 있습니다.
  • 이 책의 코드는 numpy 1.16/1.18/1.19, scikit-learn 0.21/0.22/0.23/0.24, TensorFlow 2.0rc1/rc2/2.0/2.1/2.2/2.3/2.4/2.5/2.6 에서 테스트되었습니다.

이 페이지에서 책의 에러타와 라이브러리 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다.

이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다.

감사합니다! 🙂


Outputs (aka. errata)

  • ~22: 3쇄에 반영되었습니다.
  • ~40: 4쇄에 반영되었습니다.
  • ~51: 5쇄에 반영되었습니다.
  1. (p212, p213) 텐서플로 2.0.0 RC1 버전이 릴리스되었습니다. p212 맨 아래 설치 문장을 다음과 같이 바꾸어 주세요.
    !pip install tensorflow-gpu==2.0.0-rc2

    p212 중간에 출력되는 텐서플로 버전을 2.0.0-rc1에서 2.0.0-rc2로 바꾸어 주세요.

  2. (p212, p213) 텐서플로 2.0 버전이 릴리스되었습니다. p212 맨 아래 설치 문장을 다음과 같이 바꾸어 주세요.
    !pip install tensorflow-gpu==2.0.0

    p212 번호 2 아래 첫 번째 문장에서 “텐서플로는 2019년 9월에 2.0 RC 버전이 릴리스되었습니다”를 “텐서플로는 2019년 10월에 2.0 버전이 릴리스되었습니다”로 바꾸어 주세요. 중간에 출력되는 텐서플로 버전을 2.0.0-rc2에서 2.0.0으로 바꾸어 주세요.

  3. (p93) 페이지 아래에서 5번째 줄에 “양수와 음수가 섞여 있음을“을 “양수로 이루어져 있음을“로 정정합니다.(이*학 님)
  4. (p170) 첫 번째 문장에서 “신경망 알고리도즘으로“를 “신경망 알고리즘으로“로 정정합니다.(이*학 님)
  5. (p124) fit 메서드 아래 네 번째 줄에서 np.random.seed(42) 라인이 들여쓰기가 잘못되어 있습니다. 다음과 같이 정정합니다.(박*규 님)
    def fit(self, x, y , epochs=100):
        ...
        self.w_history.append(self.w.copy())
        np.random.seed(42)
        for i in range(epochs):
            ...
  6. (p188) 페이지 위쪽 코드 중 dual_layer 객체를 다음과 같이 random_init_net으로 정정합니다.(박*규 님)
    plt.plot(random_init_net.losses)
    plt.plot(random_init_net.val_losses)
  7. (p230) 두 번째 정확도 그래프를 그리는 코드에서 plt.ylabel('loss')plt.ylabel('accuracy')로 정정합니다. 그래프의 범례에 있는 ‘train_loss‘, ‘val_loss‘도 ‘train_accuracy‘, ‘val_accuracy‘로 정정합니다.(박*규 님)
  8. (p130) 페이지 중간의 코드에서 layer2.score(X_val_scaled, y_val)layer2.score(x_val_scaled, y_val)로 정정합니다.
  9. (p53) 아래에서 3번째 줄에 ‘경사 하강법(gradientdescent)에 대해 배웁니다’를 ‘경사 하강법(gradient descent)에 대해 배웁니다’로 정정합니다.
  10. (p110) SingleLayer 클래스의 add_bias() 메서드를 삭제합니다.(Sir* B 님)
  11. (p106) 페이지 중간 소제목 “손실 함수의 결괏값 조정해 저장 기능 추가하기”를 “손실 함수의 결괏값 저장 기능 추가하기”로 바꿉니다.
  12. (p177) 페이지 아래쪽 수식에서 \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial Z_2}= \frac{\partial Z_2}{\partial W_2}를 \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial Z_2} \frac{\partial Z_2}{\partial W_2}로 정정합니다.
  13. (p183) 페이지 맨 마지막 수식에서 \frac{\partial L}{\partial Z_2}\frac{\partial Z_2}{\partial A_1} = \frac{\partial A_1}{\partial Z_1}을 \frac{\partial L}{\partial Z_2}\frac{\partial Z_2}{\partial A_1} \frac{\partial A_1}{\partial Z_1}로 정정합니다.
  14. (p248) 페이지 아래쪽 코드에서 배열 x 값이 잘못되었습니다.(ps*3 님)
    x = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8],
                  [9, 10, 11, 12]])

    가 아니고

    x = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8],
                  [9, 10, 11, 12],
                  [13, 14, 15, 16]])

    이어야 합니다.

  15. (p171) 페이지 중간 테이블에서 2행, 1열의 가중치가 w_{21}이 아니고 w_{12}입니다.(ph**oh 님)
  16. (p315) summary() 메서드의 출력에서 임베딩 층의 출력 크기가 (None, None, 8)이 아니고 (None, None, 32)입니다. 파라미터의 갯수는 8000이 아니고 32000입니다. 비슷하게 lstm 층의 출력 크기는 (None , 1)이 아니고 (None, 8)입니다. 파라미터 갯수는 40이 아니고 1312입니다. 마지막 dense 층의 출력 파라미터의 갯수는 2에서 9로 바뀌어야 합니다. Total params와 Trainable params의 수치는 8,042에서 33,321로 바뀌어야 합니다.(ph**oh 님)
  17. (p314) LSTM 셀의 세 번째 공식 \text{C} = \text{F} \times \text{I}\text{C} = \text{F} + \text{I}로 정정합니다.
  18. (p258) 첫 번째 코드 블럭에서 f_out = tf.reshape(p_out1, [x.shape[0], -1]) 코드를 f_out = tf.reshape(p_out, [x.shape[0], -1]) 로 정정합니다.(Ju**n 님)
  19. (p58) w_rate을 계산하는 수식 두 번째 줄에서 (x[0]*(w+0.1)-w)이 아니고 x[0]*((w+0.1)-w)로 정정합니다.(이*영 님)
  20. (p190) fit() 메서드의 첫 줄에서 y=y.reshape(-1, 1)y_val=y_val.reshape(-1, 1)로 정정합니다.(김*진 님)
  21. (p168) 두 번째 코드 블럭의 for 반복문에서 for w in layer.w_history:for w in single_layer.w_history: 로 정정합니다.(전*철 님)
  22. (p184) 4번 바로 위 두 개의 수식에서 (-(Y-A_2)W^1_2 \odot W^T_2 \odot (1 - A_1))(-(Y-A_2)W^T_2 \odot A_1 \odot (1 - A_1)) 으로 정정합니다.(전*철 님)
  23. (p50) 첫 번째 그림에서 10개의 열이 아니고 11개의 열이 그려져 있습니다. 그림에서 마지막 열을 삭제합니다.(홍*창 님)
  24. (p97) ‘훈련 세트와 테스트 세트 나누기’ 절 아래 3번째 줄에서 ‘샘플 개수가 각각 212, 357입니다’를 ‘샘플 개수가 각각 357, 212입니다’로 정정합니다.(홍*창 님)
  25. (p103, 110, 165, 206, 210, 301) np.exp 함수는 큰 값이 입력되면 inf를 반환합니다. 안전한 계산을 위해 np.exp 함수가 사용되기 전에 다음과 같은 코드로 입력값 z를 클리핑합니다.
    z = np.clip(z, -100, None)     # 안전한 np.exp() 계산을 위해
  26. (p184) 맨 위 두 번째 수식에서 1^T (-(Y-A_2)W^1_2 \odot W^T_2 \odot (1 - A_1))1^T (-(Y-A_2)W^T_2 \odot A_1 \odot (1 - A_1)) 으로 정정합니다.
  27. (p113) 첫 번째 코드 위에 from sklearn.linear_model import SGDClassifier를 추가합니다.(도*리 님)
  28. (p118) 두 번째 코드 블럭에서 sgd.fit(x_train, y_train)sgd.fit(x_train_all, y_train_all)로 정정합니다.(도*리 님)
  29. (p128, 129, 130) 3개의 코드 블럭과 3개의 그래프에서 faturefeature로 정정합니다.(성* 님)
  30. (p205) 위에서 3번째 줄에 -(y_2-a_2), -(y_2-a_2)-(y_2-a_2), -(y_3-a_3)로 정정합니다.(하*우 님)
  31. (p234) “첫 번째 합성곱” 섹션 아래 그림에서 [3,5,1,2] 배열 왼쪽에 w가 아니라 w^r로 정정합니다.(하*우 님)
  32. (p238) 위에서 6번째 줄에 “mod 매개변수에”를 “mode 매개변수에”로 정정합니다.(하*우 님)
  33. (p257) 첫 번째 코드 블럭에서 c_out1c_out으로 정정합니다.(하*우 님)
  34. (p273, p277) 두 번째 정확도 그래프를 그리는 코드에서 plt.ylabel('loss')plt.ylabel('accuracy')로 정정합니다. 그래프의 범례에 있는 ‘train_loss‘, ‘val_loss‘도 ‘train_accuracy‘, ‘val_accuracy‘로 정정합니다.(하*우 님)
  35. (p264) 두 번째 줄의 “update_val_loss() 메서드도 softmax_cross_entropy_with_logits()  함수를 사용하도록 바꾸겠습니다“를 “검증 손실은 softmax_cross_entropy_with_logits() 함수를 사용하는 get_loss() 함수로 계산합니다“로 정정합니다.(하*우 님)
  36. (p201) 아래에서 6번째 줄에 -(1 \times 0.74 + 0 \times 0.18 + 0 \times 0.08)-(1 \times \text{log}0.74 + 0 \times \text{log}0.18 + 0 \times \text{log}0.08)로 정정합니다.(송*윤 님)
  37. (p284) 아래에서 3번째 줄에 (n_c, 1)(n_c, )로 수정합니다.
  38. (p314) LSTM 셀의 그림에서 왼쪽 맨 위에 F 아래 동그라미안에 x 기호를 추가합니다.
  39. (p35) 페이지 중간 3번 문장 끝에 다음 내용을 추가합니다. “macOS 사용자는 CMD + Enter를 누르세요.
  40. (p248) (3쇄) 페이지 마지막 문장 끝에 “변수에 동일한 값으로 지정합니다. max_pool2d() 함수가 반환한 Tensor 객체를 numpy() 메“를 추가합니다.(이*곤 님)
  41. (p100) 위에서 8번째 줄에 “[4, 5, 8]이라는 넘파이 배열로”를 “[4, 6, 8]이라는 넘파이 배열로”로 정정합니다.(이*곤 님)
  42. (p151) 코드 블럭의 2번째 줄과 8번째 줄의 x_trainx_train_all로 정정합니다.(이*곤 님)
  43. (p164) 아래에서 2번째 줄에 “05장과 동일합니다”를 “05장과 거의 동일합니다”로 수정합니다.(이*곤 님)
  44. (p162) 페이지 중간의 \boldsymbol{X}^T\boldsymbol{E} 행렬 식에서 첫 번째 열의 마지막 원소 x_{30}^{(364)}x_{30}^{(1)}로 정정합니다.(이*구 님)
  45. (p106) 아래에서 3번째 줄에 -1 \times 10^{-10} \sim 1-1 \times 10^{10}을 1 \times 10^{-10} \sim 1-1 \times 10^{-10}로 정정합니다.(장*진 님)
  46. (p174) 첫 번째 그림에서 x_nx_m으로, z_mz_n으로 수정합니다. 그 아래 첫 번째 문장에서 “n 개의 입력이 m 개의 뉴런으로 입력됩니다”를 “m 개의 입력이 n 개의 뉴런으로 입력됩니다”로 수정합니다.
  47. (p163) 두 번째 코드 블럭의 맨 아래 5번째 줄에서 “# 그레이디언트에서 페널티”를 “# 그레이디언트 페널티”로 수정합니다. (p165) 맨 아래 4번째 줄에서 “# 그레이디언트에서 페널티 항의 미분값을 뺍니다“를 “# 그레이디언트 페널티 항의 미분값을 더합니다“로 정정합니다.(홍*창 님)
  48. (p173) 맨 아래에서 2번째 줄에 “m개로 늘려”를 “n개로 늘려”로 정정합니다.(안*일 님)
  49. (p175) 그림 바로 아래 2번째 문장에서 “여기까지 내용이 첫 번째 은닉층에”를 명확한 설명을 위해 “여기까지 내용이 2개의 뉴런을 가진 첫 번째 은닉층에”로 수정합니다.(안*일 님)
  50. (p180) 중간 수식 바로 아래 문장에서 “두 도함수를 곱하는 것은 각 샘플이 만든 오차를 출력층에 있는 2개의 뉴런에”를 “두 도함수를 곱하는 것은 각 샘플이 만든 오차를 은닉층에 있는 2개의 뉴런에”로 정정합니다.(안*일 님)
  51. (p288~p290) 손실 함수에서부터 연쇄법칙을 적용하지 않아 RNN의 도함수 유도 과정에서 행렬 곱셈의 차원이 맞지 않는 경우가 있습니다. 이를 보완하기 위해 다음과 같이 수정합니다.* 288페이지 3번째 식
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1h}}=\boldsymbol H_p+\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2) \dfrac{\partial \boldsymbol Z_{1p}}{\partial \boldsymbol W_{1h}}
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1h}}=\boldsymbol H_p+\dfrac{\partial \boldsymbol Z_{1p}}{\partial \boldsymbol W_{1h}} \boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2)로 수정합니다.* 288페이지 4번째 식
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1h}}=\boldsymbol H_p+\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2) (\boldsymbol H_{pp}+\boldsymbol W_{1h} \odot (1-\boldsymbol H_{pp}^2) \dfrac{\partial \boldsymbol Z_{1pp}}{\partial \boldsymbol W_{1h}})
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1h}}=\boldsymbol H_p+ (\boldsymbol H_{pp}+\dfrac{\partial \boldsymbol Z_{1pp}}{\partial \boldsymbol W_{1h}}\boldsymbol W_{1h} \odot (1-\boldsymbol H_{pp}^2) )\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2)로 수정합니다.

    * 289페이지 1번째 식에서
    \boldsymbol H_{ppp} \boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2) \odot \boldsymbol W_{1h} \odot (1-\boldsymbol H_{pp}^2)
    \boldsymbol H_{ppp} \boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2) \boldsymbol W_{1h} \odot (1-\boldsymbol H_{pp}^2)로 수정합니다.

    * 289페이지 3번째 식에서
    \boldsymbol X+\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2)\dfrac{\partial \boldsymbol Z_{1p}}{\partial \boldsymbol W_{1x}}
    \boldsymbol X+\dfrac{\partial \boldsymbol Z_{1p}}{\partial \boldsymbol W_{1x}}\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2)로 수정합니다.
    그 아래 문장에서 “한 타임 스텝을 더 전개해 보겠습니다”를 “손실 함수를 포함하여 한 타임 스텝을 더 전개해 보겠습니다”로 수정합니다.
    그 아래 식
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1x}}=\boldsymbol X+\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2)(\boldsymbol X+\boldsymbol W_{1h} \odot (1-\boldsymbol H_{pp}^2)\dfrac{\partial \boldsymbol Z_{1pp}}{\partial \boldsymbol W_{1x}})
    \dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1x}}=\dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\left(\boldsymbol X+(\boldsymbol X_p+\dfrac{\partial \boldsymbol Z_{1pp}}{\partial \boldsymbol W_{1x}}\boldsymbol W_{1h} \odot (1-\boldsymbol H_{pp}^2))\boldsymbol W_{1h} \odot (1-\boldsymbol H_p^2) \right)로 수정합니다.

    * 289페이지 마지막 식에서
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1x}}=\boldsymbol X+\boldsymbol X \boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)+\boldsymbol X \boldsymbol W_{1h}\odot(1-\boldsymbol H_{p}^2)\odot\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)+\cdots
    \dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1x}}=\dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\left(\boldsymbol X+\boldsymbol X_p \boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)+\boldsymbol X_{pp} \boldsymbol W_{1h}\odot(1-\boldsymbol H_{p}^2)\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)+\cdots \right)로 수정합니다.

    * 290페이지 식 2번째 줄
    =1+\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2) \dfrac{\partial \boldsymbol Z_{1p}}{\partial \boldsymbol b_1}
    =1+\dfrac{\partial \boldsymbol Z_{1p}}{\partial \boldsymbol b_1}\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)로 수정합니다.
    그 아래 다음 문장을 추가합니다. “앞에서와 같이 손실 함수를 포함하여 한 타임 스텝을 더 전개해 보겠습니다
    그 아래 식 2개의 줄
    =1+\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2) (1+\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)\dfrac{\partial \boldsymbol Z_{1pp}}{\partial \boldsymbol b_1})
    =1+\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)+\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)\odot\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)+\cdots

    \dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol b_1}=\dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\left(1+(1+\dfrac{\partial \boldsymbol Z_{1pp}}{\partial \boldsymbol b_1}\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2))\boldsymbol W_{1h}\odot(1-\boldsymbol H_{p}^2)\right)
    =\dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\left(1+\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)+\boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)+\cdots\right)
    로 수정합니다.

  52. [5쇄] (p106) 아래에서 3번째 줄에 -1 \times 10^{-10} \sim 1-1 \times 10^{-10}1 \times 10^{-10} \sim 1-1 \times 10^{-10}로 정정합니다.(장*진 님)
  53. [5쇄] (p289) 마지막 식에서
    \dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1x}}=\boldsymbol X+\boldsymbol X \boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)+\boldsymbol X \boldsymbol W_{1h}\odot(1-\boldsymbol H_{p}^2)\odot\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)+\cdots
    \dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\dfrac{\partial \boldsymbol Z_1}{\partial \boldsymbol W_{1x}}=\dfrac{\partial \boldsymbol L}{\partial \boldsymbol Z_1}\left(\boldsymbol X+\boldsymbol X_p \boldsymbol W_{1h}\odot(1-\boldsymbol H_p^2)+\boldsymbol X_{pp} \boldsymbol W_{1h}\odot(1-\boldsymbol H_{p}^2)\boldsymbol W_{1h}\odot(1-\boldsymbol H_{pp}^2)+\cdots \right)로 수정합니다.
  54. (p124) 코드 블럭의 16번째 줄, (p143) 첫 번째 코드 블럭 4번째 줄에서 self.b -= b_gradself.b -= self.lr * b_grad로 정정합니다.
  55. (p210) 위에서 5번째 줄, (p299) 위에서 17번째 줄, (p301) 위에서 16번째 줄에서 np.sum(err)/mnp.sum(err, axis=0)/m으로 정정합니다.(이*준 님)
  56. (p171) 위에서 두 번째 줄 아래 식에서 w 행렬의 1행 2열이 w_{21}이 아니라 w_{12}입니다. 그 아래 표에서 3행 2열이 w_{21}이 아니라 w_{12}입니다.(강*윤 님)
  57. (p218) 위에서 3번째 줄에서 ‘1~9 사이의’를 ‘0~9 사이의’로 정정합니다.(강*윤 님)
  58. (p134) 아래에서 10번째 줄에 self.b -= b_gradself.b -= self.lr * b_grad로 정정합니다.(강*윤 님)
  59. (p185) 위에서 12번째 줄에 ‘페널티 항의 미분값을 뺍니다‘를 ‘페널티 항의 미분값을 더합니다‘로 정정합니다.(강*윤 님)
  60. (p82) 마지막 줄, (p83) 위에서 1번째 줄, 2번째 줄, 5번째 줄, 6번째 줄, 아래에서 5번째 줄, (p320) 찾아보기에서 ‘오즈 비‘를 ‘오즈‘로 수정합니다. (p83) 위에서 4번째 줄 ‘OR(odds ratio)‘를 ‘Odds‘로 수정합니다.

Your Inputs

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.