会社からAIを勉強しろと全社員に指令が下ったので、約10年ぶりに本書を再読。自分では結構内容を覚えているつもりだったのだが、読んでみるとほとんど内容を忘れていて、事前に予想していたよりもじっくりと読む必要のある個所がいくつもあった。ただ、説明が非常に丁寧で、各種理数系分野の入門者向けの本に良くありがちな、感覚的な説明で肝心な部分をブラックボックス化することもなく、ほぼ全ての単元を数式ベースで仕組みについて教えてくれて、非常に勉強になった。一方で、プロンプトエンジニアリング以上の仕事をやれるレベルには到底自分は行きつけそうにないし、あまりこの分野に深入りしてもSalesforceエンジニアとしては収穫できるものが多くはないかな、と感じたのも事実で、AIの理論面の入門書の勉強は、本シリーズの自然言語処理編で打ち切ることにした。後は、使う側の勉強をのんびりとやりたいと思った。とても良い書籍であった。
無料のKindleアプリをダウンロードして、スマートフォン、タブレット、またはコンピューターで今すぐKindle本を読むことができます。Kindleデバイスは必要ありません。
ウェブ版Kindleなら、お使いのブラウザですぐにお読みいただけます。
携帯電話のカメラを使用する - 以下のコードをスキャンし、Kindleアプリをダウンロードしてください。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 単行本(ソフトカバー) – 2016/9/24
斎藤康毅
(著)
このページの読み込み中に問題が発生しました。もう一度試してください。
{"desktop_buybox_group_1":[{"displayPrice":"EUR 20.42","priceAmount":20.42,"currencySymbol":"EUR","integerValue":"20","decimalSeparator":".","fractionalValue":"42","symbolPosition":"left","hasSpace":true,"showFractionalPartIfEmpty":true,"offerListingId":"pWl5dvMI89Brnh060y476LIuzxdguD2D2tzDMO2uLr9ZX8zU8%2BZJWCYZ6i8bHWjrdFyPR253V0b90NEYptE%2FMUN2WW3H0uyzUSIom%2BL624Wl3GrAHkhUg3d8DY%2F7M7LGWP0JhAyVI2c%3D","locale":"ja-JP","buyingOptionType":"NEW","aapiBuyingOptionIndex":0}]}
購入オプションとあわせ買い
ディープラーニングの本格的な入門書。外部のライブラリに頼らずに、Python 3によってゼロからディープラーニングを作ることで、ディープラーニングの原理を楽しく学びます。
ディープラーニングやニューラルネットワークの基礎だけでなく、誤差逆伝播法や畳み込みニューラルネットワークなども実装レベルで理解できます。
ハイパーパラメータの決め方や重みの初期値といった実践的なテクニック、Batch NormalizationやDropout、Adamといった最近のトレンド、自動運転や画像生成、強化学習などの応用例、さらには、なぜディープラーニングは優れているのか?なぜ層を深くすると認識精度がよくなるのか?といった“Why"に関する問題も取り上げます。
ディープラーニングやニューラルネットワークの基礎だけでなく、誤差逆伝播法や畳み込みニューラルネットワークなども実装レベルで理解できます。
ハイパーパラメータの決め方や重みの初期値といった実践的なテクニック、Batch NormalizationやDropout、Adamといった最近のトレンド、自動運転や画像生成、強化学習などの応用例、さらには、なぜディープラーニングは優れているのか?なぜ層を深くすると認識精度がよくなるのか?といった“Why"に関する問題も取り上げます。
- 本の長さ298ページ
- 言語日本語
- 出版社オライリージャパン
- 発売日2016/9/24
- 寸法21 x 15 x 2 cm
- ISBN-104873117585
- ISBN-13978-4873117584
よく一緒に購入されている商品

対象商品: ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
総額: $00$00
当社の価格を見るには、これら商品をカートに追加してください。
ポイントの合計:
pt
もう一度お試しください
追加されました
3をすべてカートに追加する
一緒に購入する商品を選択してください。
こちらもおすすめ
ページ: 1 / 1 最初に戻る


[第3版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)単行本(ソフトカバー)送料: EUR 27.30残り15点(入荷予定あり)
商品の説明
出版社からのコメント
■本書「まえがき」より
本書は「ディープラーニング」についての本です。ディープラーニングを理解するために必要な知識を、初歩的なことから一つひとつ積み重ねながら説明していきます。ディープラーニングとは何なのか、どういう特徴があるのか、どういう原理で動作しているのか、といったことをできるだけやさしい言葉で説明します。ただし、技術の概要だけを説明するのではなく、一歩踏み込んでより深く理解してもらうことを目的としています。そこが本書の特徴のひとつです。
では、ディープラーニングについて、“より深く"理解するにはどうしたらよいでしょうか?筆者が考えるに、そのための最も良い方法は、実際に作ってみることです。実際に動くプログラムをゼロから作り、ソースコードを読みながら考える――そのような作業が、ディープラーニングを(さらに言えば、高度に見える何らかの技術を)正しく理解する上で重要だと筆者は信じて疑いません。ここで、「ゼロから」という言葉を用いましたが、それはできるだけ外部の既成品(ライブラリやツールなど)には頼らないということを意味します。つまり、本書が目標とすることは、中身の分からないブラックボックスは極力使わずに、自分が理解できる最低限の知識から出発し、最先端のディープラーニングを作り上げることなのです。そして、その作るという過程を通して、ディープラーニングについてより深く理解してもらいたいと思っています。
本書は「ディープラーニング」についての本です。ディープラーニングを理解するために必要な知識を、初歩的なことから一つひとつ積み重ねながら説明していきます。ディープラーニングとは何なのか、どういう特徴があるのか、どういう原理で動作しているのか、といったことをできるだけやさしい言葉で説明します。ただし、技術の概要だけを説明するのではなく、一歩踏み込んでより深く理解してもらうことを目的としています。そこが本書の特徴のひとつです。
では、ディープラーニングについて、“より深く"理解するにはどうしたらよいでしょうか?筆者が考えるに、そのための最も良い方法は、実際に作ってみることです。実際に動くプログラムをゼロから作り、ソースコードを読みながら考える――そのような作業が、ディープラーニングを(さらに言えば、高度に見える何らかの技術を)正しく理解する上で重要だと筆者は信じて疑いません。ここで、「ゼロから」という言葉を用いましたが、それはできるだけ外部の既成品(ライブラリやツールなど)には頼らないということを意味します。つまり、本書が目標とすることは、中身の分からないブラックボックスは極力使わずに、自分が理解できる最低限の知識から出発し、最先端のディープラーニングを作り上げることなのです。そして、その作るという過程を通して、ディープラーニングについてより深く理解してもらいたいと思っています。
著者について
斎藤 康毅(さいとう こうき):1984年長崎県対馬生まれ。東京工業大学工学部卒、東京大学大学院学際情報学府修士課程修了。現在、企業にて、コンピュータビジョンや機械学習に関する研究開発に従事。翻訳書に『実践 Python 3』『コンピュータシステムの理論と実装』『実践 機械学習システム』(以上、オライリー・ジャパン)などがある。
登録情報
- 出版社 : オライリージャパン
- 発売日 : 2016/9/24
- 言語 : 日本語
- 本の長さ : 298ページ
- ISBN-10 : 4873117585
- ISBN-13 : 978-4873117584
- 商品の重量 : 454 g
- 寸法 : 21 x 15 x 2 cm
- Amazon 売れ筋ランキング: 本 - 3,028位 (本の売れ筋ランキングを見る)
- カスタマーレビュー:
著者について
著者をフォローして、新作のアップデートや改善されたおすすめを入手してください。

1984年長崎県対馬市生まれ。東京工業大学卒、東京大学大学院修士課程修了。現在は、株式会社Preferred Networksにて人工知能に関する研究開発に従事。
2017年ITエンジニア本大賞(技術書部門大賞)、2019年ITエンジニア本大賞(審査員特別賞)受賞。
著書に『ゼロから作る Deep Learning』シリーズ、翻訳書に『コンピュータシステムの理論と実装』『実践機械学習システム』『実践 Python 3』(以上、オライリー・ジャパン)などがある。
カスタマーレビュー
星5つ中4.4つ
5つのうち4.4つ
907グローバルレーティング
評価はどのように計算されますか?
全体的な星の評価と星ごとの割合の内訳を計算するために、単純な平均は使用されません。その代わり、レビューの日時がどれだけ新しいかや、レビューアーがAmazonで商品を購入したかどうかなどが考慮されます。また、レビューを分析して信頼性が検証されます。
お客様のご意見
お客様はこのディープラーニング入門書について、以下のような評価をしています: 本書は初心者向けの内容で、数式の説明とコードへの実装が丁寧だと好評です。また、計算グラフを用いた説明や、数学的な理論を正しく理解できる点も魅力的だと感じています。 読みやすさについては、非常に良いと評価されており、いつでもどこでも読めるという声があります。 学習効果についても、学習のペースが徐々に上がっていくという意見が多くあります。 多くの読者が、この本の一冊で十分に理解できたと満足しています。 特に誤差伝播法については、計算グラフを用いて分かりやすく解説しており、理解しやすいと感じているようです。 全体的に、本の内容が非常にわかりやすく、すぐに理解できる内容であると評価されています。 一方で、一部の章では急勾配になる部分があるものの、学習効果が徐々に上がる傾向があると指摘されています。
お客様の投稿に基づきAIで生成されたものです。カスタマーレビューは、お客様自身による感想や意見であり、Amazon.co.jpの見解を示すものではありません
お客様の投稿に基づきAIで生成されたものです。カスタマーレビューは、お客様自身による感想や意見であり、Amazon.co.jpの見解を示すものではありません
お客様の投稿に基づきAIで生成されたものです。カスタマーレビューは、お客様自身による感想や意見であり、Amazon.co.jpの見解を示すものではありません選択して詳細を見る
65人のお客様がわかりやすさに言及し、55人が肯定的、10人が否定的です65人のお客様が「わかりやすさ」に言及しています55肯定的10否定的
"...そういう人にとっての福音の書です。とにかく、他の書籍に比べて圧倒的に説明が丁寧で、かつわかりやすい。もともと、ディープラーニング自体が相当ハードルの高いものではありますが、この本を最後まで読み通せれば、少なくとも、入り口には立てたかなと思える程度には理解できます。..." もっと読む
"ディープラーニングの本としては圧倒的にわかりやすい気がします。 前半で実装に必要なPythonの知識を軽くおさらいできますが、如何せんPythonを触ったこともないような人間には途中からついて行くのが難しかったです。..." もっと読む
"より分かりやすいけど、やはり難しい。読む前に、事前準備が必要だと思います。 ・Pythonの知識 ・オブジェクト指向プログラミングの知識 ・線形代数の知識 ・微积分学の知識 ・デジタル信号処理の知識..." もっと読む
"...今日のAI 回路の主流である、非線形分析アルゴリズムへの移り変わりなどの解説が最初にあり、徐々に今日の多様な分析方法へと解説を進めており、とてもわかりやすく、良い解説書だと思います。..." もっと読む
56人のお客様が解説に言及し、55人が肯定的、1人が否定的です56人のお客様が「解説」に言及しています55肯定的1否定的
"...の本に良くありがちな、感覚的な説明で肝心な部分をブラックボックス化することもなく、ほぼ全ての単元を数式ベースで仕組みについて教えてくれて、非常に勉強になった。..." もっと読む
"...しかし,何事も基礎というものは最も重要であり,本書はDeepLearningの仕組みについて詳しくない人達へ向けた最良の入門書となっていると感じました. 基本的な実装から「なぜDeepLearningが動作するのか」という根本の部分が見えてきます...." もっと読む
"全て読んだわけではありませんが、非常に丁寧な解説がされており、無理なく読み進んでいけそうです。第1章にpythonの簡単な講座の様なものがありますが、pythonの参考書を別で購入しておいた方がスムーズにコードが読めるので、そちらの方も用意した方が良いと考えます。" もっと読む
"深層学習についての 定評ある 学習書です。" もっと読む
23人のお客様が分かりやすさに言及し、21人が肯定的、2人が否定的です23人のお客様が「分かりやすさ」に言及しています21肯定的2否定的
"完成度が高く、理論や正解率を上げるテクニックを丁寧に書いている。しかし、ダウンロードしたサンプルプログラミングを眺めながら、理解していく必要がある。本文中には必要な箇所のみ記載されているため。他の初級者向けで勉強した後でないと、この本は難しい、ハードルが高すぎると思います。..." もっと読む
"pythonを初めて1ヶ月程、入門書を読み終えた初心者ですが、とてもわかり易いです。 平易な文章と簡単な図を用いた説明とで初心者でも読めるような内容となっています。 特別な文法はほとんど無いので入門書を読み終えたぐらいでも理解できます。..." もっと読む
"ディープラーニングのライブラリを使っていたらとてもわからない、ライブラリの内部の動作を知るための本です。 噂に違わず、わかりやすく書かれていると思います。 必須知識は、pythonプログラミングの基礎と、数学(偏微分、行列の積)あたりでしょうか?..." もっと読む
"詳しく、また丁寧に書かれている。最近、レベルの低いものが幾つか出てきていて購入し、失敗する事が多い。しかし、この本は非常にレベルも高く、またわかりやすい。皆様に自信を持ってお勧めします。" もっと読む
14人のお客様が読みやすさに言及し、13人が肯定的、1人が否定的です14人のお客様が「読みやすさ」に言及しています13肯定的1否定的
"ニューラルネットの初歩的なところから、ディープラーニングの内容まで、非常に簡潔に書かれていて一気に読み進めることができました。 基本的なところは、この本一冊で十分理解できたと思います。 とても読みやすくてよかったと思います。" もっと読む
"...2章 パーセプトロン,3章 ニューラルネットワークまでは, 数学が苦手な自分でも気持ちよく読み進めることができました。 4章 ニューラルネットワークの学習 5章 誤差逆伝搬法 6章 学習に関するテクニック..." もっと読む
"一通り読みました。 誤差逆伝搬法を計算グラフで学ぶことに焦点を当てて説明しています。このあたりはなるほどと思える内容でとても面白く読むことができました。..." もっと読む
"...コードと解説を見ながら、ポチポチと真似して書いていくと、なかなか楽しいし、文系の僕でもディープラーニングが何をしているのかが何となく理解できます。" もっと読む
12人のお客様が学習効果に言及し、12人が肯定的、0人が否定的です12人のお客様が「学習効果」に言及しています12肯定的0否定的
"この書籍は、AIの理論を学習するのにとても良い1冊です。 豊富な理論が例題として収録されており楽しく学習できます。 また、AIはカーナビ・自動販売機などの身近なところで活用 されており役立ちます。" もっと読む
"...人間の脳の研究からシナプスの理論が進化し、コンピュータの高速化や活性化関数の見直しを得てAIが進化していく過程が垣間見れるのは非常に興味深い内容でした。 個人的にはずいぶん昔合成化学において温度、圧力、成分比などを変数として最大効率をモンテカルロ法等を用いて求めるなどした教材を思い出しました。..." もっと読む
"...本当に初心者が必要としている情報が書いてあります。 また「自分で手を動かして覚える」ことにも重きを置いているので、知識だけで何もできないような事にもなりません。 これから機械学習を学び始めようとされている方はぜひ手に取っていただきたい商品です。" もっと読む
"...こんなゆっくりなペースで大丈夫かと思うほど、平易に書かれています。 章を進めるにしたがって、学習のペースが徐々に上がってゆきます。最後はわりと急勾配です。それでも前半の超ゆっくりペースと中盤のゆっくりペースのおかげで、全体としては平易な印象を受けます。" もっと読む
12人のお客様が本の質に言及し、12人が肯定的、0人が否定的です12人のお客様が「本の質」に言及しています12肯定的0否定的
上位レビュー、対象国: 日本
レビューのフィルタリング中にエラーが発生しました。ページを再読み込みしてください。
- 2026年3月11日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入
- 2025年12月2日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入本当にAIを一から作成する際に勉強するものとしては、優秀だと思うが、
世の中の求め方が、AI作成ではなく、AIを使った開発になってきているので、
もうあんまり求められてない知識かも。
知っておいた方が良いのかもしれないが、知らなくても困らない。
数理知識的な部分は、AI学ぶような人ならなんとなくわかっている、or自分で調べられるだろうし。
- 2025年10月30日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入数式の説明とコードへの実装が丁寧でわかりやすかった。
微分と偏微分の計算方法をあらかじめ理解しておくと
書籍の理解が少し楽になるかもしれません。
ディープラーニング領域への勉強はおそらくこれ以上進む予定はないが、他のことで理解の助けになった。
- 2025年11月5日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入ムズ
- 2025年1月2日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入1日1章でいける、とレビューにはあったことから正月休みを使って読破中。
コードを含め全てを理解しながら進むのはpython初心者にはなかなか難しいです。
pythonはCと比べて、非常に便利な言語ですね(覚えることは多いが)。numpyは道具としては最高で、これを使うことは別にブラックボックスとは思いません(Cでも行列計算などは数値計算ライブラリを多用しますし)。なんか、0から作るって感じて楽しいです。
今の所3日間で4章まで進みましたが、先に読んだtensorflow、keras関連の書籍で?だったところが納得できているので星5つとします。目標は7章までとしています。
ただコードは短いので、比較的楽にコーディングをしながら進めることができます。時折、説明に誤記と思しき箇所を見つけますが、とりあえず無視(笑)して読み替えて読み進めています。コードも少し?なところがありますが、修正しつつとりあえず進めています。
なお、7章、8章は(斜め読みしたところ)かなり簡素な説明になっています。畳み込みではim2colなる仕組みが紹介されていますが、当該本ではブラックボックスで使うと宣言されています。これを説明すると紙面をかなり使いますし、興味のある人はネットで調べれば「徹底解説」もされているので問題はないと思いますが、いろいろな場所(ネットや、他の本)を行ったり来たりさせられることが多い本との印象を持ち値ました。
8章はコードの説明すらなく「利用してくだい」だけです。まあ、このような本を読む人は独学に慣れているので、7章まで得た知識を使えばなんとかなると思ってはいます。ただ計算が重そう(書籍によれば)なので、研究室のPCを借りることにはなりそうですが。
- 2016年10月24日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入人の脳神経回路の仕組みを模したニューラルネットワークをどのように実装して、どのように学習させていくべきかを絵図数式、さらにはPython3による実装で解説してくれている。
コンピュータが一見曖昧で判定基準の定義が難しい事象(本書では主に文字認識)などを、どのようなプロセスを経て学習していくのかを本書を読めばイメージできるようになると思う。
高校数学程度の知識(主に、微分、行列、数列)くらいあれば内容を理解できるレベルに落とし込んでいてくれるのが素晴らしい。効率良い実装方法、理論などを、検証データによる事例も合わせて証明し、pythonの実装コードを記載してくれているという至れり尽くせりの内容。
現時点(2016年)で、関連する研究機関や業務、海外の論文を入手翻訳できる環境でないとなかなか知ることの出来ない手の内を、一般に向け執筆してくれた事に敬意を送りたい。ディープラーニングに興味を持つ足がかりになる一冊。
●本書のニューラルネットワークの実装の演習例「手書き数字データ(MNISTのデータセット)の分類の学習」(4章より抜粋、簡単な実装と処理手順まとめ)
ニューロンを全結合層、活性化関数、損失関数などで実装し、単純なニューラルネットワークを組む。
モデル例:
入力層:W1(行784、列50) -> 出力層:W2(行50、列10) -> ソフトマックス:Y(10)
※バイアスのノードは簡略化してレビュー説明するため省略している。
実行:バッチでなく1データ単位の場合:
0:ニューラルネットワーク内の入力層と出力層(W1、W2)の各ニューロン(行列の要素ごと)の持つパラメータ(重み)はランダム値で初期化
1:28*28ピクセル(合計784ピクセル)の手書き数字データ(MNISTのデータセット)をシリアライズして要素数784個の列ベクトルにして、対応する784個の入力層(W1)のニューロンに入力
2:入力層(W1)で入力値(要素数784個の列ベクトル)とニューロン(W1=行784、列50のパラメータ「重み」)が行列の積による計算がされ、計算されたデータ(要素数50の列ベクトル)に活性化関数(sigmoid関数)による計算を行い、次の出力層にベクトルデータ(要素数50の列ベクトル)が渡される。
3:出力層(W2)で、前の入力層から渡ってきたベクトルデータ(要素数50の列ベクトル)と各ニューロンのパラメータ(W2=行50、列10のパラメータ「重み」)による行列の積による計算を行う。その出力のベクトルデータ(列単位で纏められ要素数10の列ベクトルになる:この層では出力結果に繋ぐので活性化関数を使用しない)をソフトマックス関数(Y)で処理し10個(数字0〜9それぞれの分類結果の確率)の出力がされる。その内いちばん出力が高いのが文字識別分類の答えである。
4:正解ラベル(教師データ)と比較して、識別精度のズレを損失関数で導き出し、それを各層(W1、W2)のニューロンが持つパラメータ(重み)の誤差(精度のズレ)として、それぞれパラメータ(重み)更新する。
5:学習の場合は、上記1〜4をある程度の学習データ数繰り返す。推論(分類)の場合はテストデータで上記1〜3を実施する。
(※上述のモデルで省いたが、W 1,W2での行列の積での計算の直後に、バイアスと呼ばれる「層ごとにもつ前の層からの値の影響を受けない定数」を加算する処理も含まれている。バイアス数は、次の層にわたす出力(当該層の列数ぶんある)に加算するため、その列数分持っている。実装上では初期値はゼロだが、学習時は損失関数を計算して上記工程4でバイアスの更新も行っている。)
それだけでMNISTデータセット(手書き数字画像)を学習でき、精度の高い文字識別の分類ができるようになる。
従来のコードによる条件分岐などのアルゴリズムでの分類ではとても複雑になり実装も困難と言えるものが、単純なニューロンのネットワークの繋がりで簡単に実現できることに驚きである。
上記は、単純なニューラルネットワークだが、本書籍ではより画像識別に強いCNNかつある程度ディープなニューラルネットワークの実装まで紹介してくれる。
この一冊で、どういった問題には、どのような機械学習モデル(レイヤ、関数)を採用すれば良いかの概要はわかるようになる。
※3.3.2でニューラルネットワークの内積(行列の内積)の説明をしているが、説明内容は積(行列の積)である気がする。(レビュー対象が初版であるため、修正はされているかもしれない)
行列の積と内積は計算が違うので注意。
行列の内積:行と列の、x成分とy成分の積の和
以下、内容まとめメモ
---------------------------------------
1.Python入門
pythonインストール
基本的なデータ型
基本構文
Numpyライブラリ:算術計算
Matpolotlibライブラリ:グラフ出力
---------------------------------------
2.パーセプトロン
パーセプトロンはニューラルネットワークの起源。
複数の信号を入力(各重み比重あり)して、一つの信号を出力する。
入力と出力部分は、ニューロンと呼ばれる。
多層になるほど、ニューロン数が増える。
重みとバイアス値のみ変更して、AND, NAND, OR判定をする関数の作成。
パーセプトロンの限界:単層ではXORを再現できず。線形で示された領域しか表現できない。
多層パーセプトロンでXORゲートを実装できる。
加算器、基数変換も多層パーセプトロンで再現可能。
2層パーセプトロンがあればコンピュータも理論上実装可能。
---------------------------------------
3.ニューラルネットワーク
パーセプトロンで手動設定していた重みを自動で学習できるのがニューラルネットワーク。
入力層、中間層(隠れ層)、出力層からなる
活性化関数が新たに登場する。
活性化関数:主に入力信号の総和を出力信号に変換する。その際、どのように出力を活性化するかは種類によって異なる。
(非線形関数)
・シグモイド関数:滑らかな2次グラフS字曲線を描く0.0〜1.0の実数
・ステップ関数:0/1のみの出力
(正規化線形関数))
・ReLU関数:0でない場合は、1.0までの実数を出力
ニューラルネットワークの層から次の層への複数ノードの計算は、行列の積と同じプロセス。(行列の積と内積の違い注意)
層同士の計算には手前の層の列数と、後続の層の行数の数を一致させる必要がある。(行列の積の計算のため)
ニューラルネットワークは、分類問題(クラス分類)、回帰問題(数値予測)に用いることができる。
回帰問題:出力層に恒等関数が適切=入力データから連続的な数値の予測を行う
分類問題:出力層にソフトマックス関数(分類クラス数だけ出力があり、出力の総和が1になる)いちばん高い出力のクラスが最も可能性の高い分類として選ぶ。ニューラルネットワークでは一般的に出力がいちばん高いニューロンに相当するクラスを認識結果にできるので、ソフトマックス関数を省略できる。
活性化関数に線形関数(ステップ関数など)を使うのはNG
理由は、層を深くする意味がなくなる。線形関数の層を重ねた計算は、1つの層でまとめて計算できてしまう
・mnistデータセットによる手書き数字画像の文字認識
訓練画像60000, テスト画像10000
28*28ピクセルの一枚の画像に一つの数字。各ピクセルは0~255の濃さの数値
正解数字のラベルデータ付き:one-hot表現
>正解ラベルだけが1で他は0の表現。0-9の文字の分類で2が正解のone-hot表現は以下のデータ
[0,0,1,0,0,0,0,0,0,0]
ニューラルネットワークの作成
入力、ニューロンの数、出力の配列の対応
入力層:X(784) -> 隠れ層1:W1(行784*列50) -> 隠れ層2:W2(行50*列100) -> 出力層:W3(行100*列10) ->ソフトマックス:Y(10)
手前の層の列数と、後続の層の行数の数を一致させる必要がある。(行列の積のため)
これで手書き数字の文字識別分類ができる。
sample_weight.pklで各ニューロンに文字を正しく認識できる重みを与えてあるため、正しく推論できている。
---------------------------------------
4.ニューラルネットワークの学習
損失関数という指標により、その値が最も小さくなる重みパラメータを探すのが学習の目標。
与えられた題材データをそのままの生のデータでend to endで学習できるのがDEEP LEARNING。
・訓練データ(教師データ):学習用
・テストデータ:汎用能力確認用(未知なデータに対する性能)
過学習:特定データセットだけに過度に対応してしまった状態。過学習は避けるべき。全体的は汎用能力がベスト。
・損失関数:導入の理由として、この損失関数を基準として、その値が最も小さくなる重みパラメータの値を探す。例えば分類問題において、正解ラベルと比較して、不正解であれば損失関数の値が±に大きく、正解であれば値が±に小さく出力される。各ニューロンでの損失関数の値は、ニューロン全体の最も小さな損失関数がある場所への勾配を示しており、その誤差で各ニューロンのパラメータ(重み)を更新して正しい学習をさせて誤差を最小限に目指す技術。
・認識精度を高くするパラメータを得たいのに、損失関数を加えたら2度手間になるのではないか、指標は認識精度でいいのではないか、という疑問の回答:「認識精度」では、精度の数値が連続しない(2次グラフで表示したときに関数の線が途切れてしまう。ステップ関数の挙動みたいなもの)。ニューラルネットワークでは、認識精度を指標にすると、パラメータの微分が、ほとんどの場所で0になってしまうので、損失関数の値がプラスにも、マイナスにも変化しなくなってしまうのでパラメータの更新ができなくなってしまう。認識精度はパラメータの微小な変化にさほど反応を示さず、反応があったとしても不連続にいきなり変化する(ステップ関数の挙動に近い)。そのため、微小は変化が抹殺されるため、損失関数の変化は意味をなさなくなってしまう。ステップ関数のような挙動ではニューラルネットワークの学習は行えない。損失関数ならば、パラメータの微小な変化にも反応して数値が連続的に変わる。ニューラルネットワークの各パラメータは、大きな値変化でのみ更新されるものではなく、微小な変化にも合わせて更新されそれらが各ニューロンのパラメータに影響が伝播していった状態の方が、学習精度がよくなる。
損失関数例:
・2乘和誤差
・交差エントロピー誤差
・勾配の見つけ方:
数値微分:
微分とはある瞬間の変化の量を表したもの。
10分間に2キロ走った、では1分間では、1秒では、とどんどん時間を小さくすることで、ある瞬間の変化の量を得られる。
偏微分:複数の関数からによる微分。得られたものは勾配
ベクトルで2次元グラフに描画すると、羅針盤のようにある一点に向かって矢印が指し示される。その一点から遠くなる程ベクトルの矢印の大きさも大きくなる。
機械学習では、勾配が必ずしもいちばん低いところをさす訳でない。凹凸が非線形に入り組んでいる場合がある。あくまで、各地点で低くなる方向を指すのみであることに注意。
それらの求めた勾配から最小を撮るときのパラメータを探すのが「勾配法」
・勾配降下法:最小を探す
・勾配上昇法:最大を探す
特徴量:入力データから本質的なデータを的確に抽出できるように設計された変換器。特徴量はベクトルで表現
特徴量:SIFT,SURF,HOG
識別器:SVM,KNN
問題に応じて、適切な特徴量を使わないと、良い結果は得られない。
ニューラルネットワークは、特徴量も自動学習する。
学習率:ハイパーパラメータの一つ。ただのパラメータ(重み、バイアス)とは別物で、人の手で設定。
一般的には最適な値を人の手で試行錯誤が必要。
ニューラルネットワークの学習:確率的勾配下降法(SDG)
(1)ミニバッチ学習
ビッグデータなどの数百万、数千万のデータに対して損失関数を計算するのは現実的で無いので、一部のデータを無作為で抽出し、近似として利用する。
(2)勾配の算出
ミニバッチの損失関数を減らすために、各重みのパラメータの勾配を求める。
勾配は損失関数の値を最も減らす方向を示す。
(3)パラメータの更新
重みパラメータを勾配方向に微小量だけ更新する。
(4)上記(1)〜(3)を繰り返す。
実装:損失関数によるパラメータの更新は、学習率と勾配の積を、パラメータに加算する。層内のニューラルネットワーク全体のパラメータを更新するイメージ。
勾配が大きいほど更新される数値の幅が大きい。
エポック(epoch):全学習データを一回全部網羅した単位=1エポック
機械学習で使用するデータセットは、訓練データとテストデータに分けて使用する。
訓練データはあくまで訓練用、実際の学習成果はテストデータで評価を行う。
・mnistの手書き数字画像データを実際に読み込んで学習し、パラメータ(重み)を更新して正しく推論ができるかの検証。(前章で使った、模範的な重みを持ったsample_weight.pklなしで正しく学習して推論できるか検証)
画像データと、正解ラベルで学習。
ミニバッチ学習によって、損失関数が徐々に減っていることを確認。
訓練データで学習し、正解率もエポック数を繰り返すごとに上昇していることを確認。
テストデータとの正解率を比較し、双方の正解率に乖離がなく、過学習になっていないことを確認。
---------------------------------------
5.誤差逆伝播法
損失関数の勾配は数値微分だと計算に時間がかかる。
効率よく行う方法として「誤差逆伝播法」を使用する。
誤差逆伝播ならば、単純な計算で微分を求められる。
計算グラフの逆伝播によって、各ノード(ニューロン)の微分を求めることができる。
解析的な計算方法の方が処理が軽い。
損失関数の誤差逆伝播では、損失関数との差分が逆方向に伝わる。>学習における重要な性質。
正解ラベルと異なれば、損失関数による誤差は大きくなるので、その誤差を伝播してくことになる。
正解ラベルと一致すれば、損失関数による誤差は小さいので、誤差の伝播影響は少ない。
単純な、加算、乗算の逆伝播の説明から絵図を踏まえて入り、最終的にはReLU関数、Sigmoid関数、Affine、Softmax(出力用)の絵図説明、実装を紹介してくれている。
---------------------------------------
6.学習に関するテクニック
最適な重みパラメータ更新のテクニック:
SDGの欠点:強い勾配に反応しやすく、弱い勾配を検知しにくいため、強い勾配に振り回されがちな非効率な勾配探索経路になる。
欠点を補うアルゴリズムとして、Momentum,AdaGard,Adamによるパラメータ更新手法の紹介。
重みの初期値:
全て0にするのはよくない。誤差逆伝播法によって全ての重みが均一に更新されてしまうため。重みの対称的な構造を崩す、ランダムな初期値が必要。
初期値設定の技術:
・ReLU:「Heの初期値」が有効
・Sigmoid,Tanhなど:「Xavierの初期値」が有効
MNIST(手書き数字画像)のデータセットでは、XavierよりHeの方が学習が進む。(検証あり)
Batch Normalizationのアルゴリズム
活性関数の出力値の分布を適度な広がりを持つように調整する方法
・学習を早く進行できる
・初期値にそれほど依存しない
・過学習を抑制する。
層の例:
Affine -> batchnorm -> ReLu --> Affine -> batchnorm -> ReLu --> Affine ->softmax
過学習の対策:
・Weight decay
過学習を抑制する手法。学習の過程において、重みパラメータで大きな値をとる事に対して、ペナルティを課す方法。
・Dropout
ニューラルネットワークが複雑になるとWeight decayだけでは対応が困難になる場合の手法。ニューロンをランダムに消去しながら学習する手法。
ハイパーパラメータの検証:
ハイパーパラメータ:各層のニューロンの数やバッチサイズ、パラメータの更新の際の学習系数やWeight decayなどを指す。
テストデータを使って、ハイパーパラメータの評価を行ってはいけない。テストデータに対して過学習してしまうことを指す。
ハイパーパラメータは専用の確認データが必要。一般的には検証データとよぶ。
ハイパーパラメータの探索は、良い値が存在する範囲を徐々に絞りながら進めるのが良い方法。
---------------------------------------
7.畳み込みニューラルネットワーク
Convolutional Neural Network:CNN(畳み込みニューラルネットワーク)
画像処理、音声認識などで利用される。
新たなレイヤ
・「Convolutionレイヤ(畳み込み層)」
・「Poolingレイヤ(プーリング層)」
畳み込み層:
従来の全結合のニューラルネットワークでは画像データ(縦・横・チャンネル[R,G,Bなど])の3次元のデータを平らな1次元なデータにする必要があった。
一方、畳み込み層では、入力データをそのまま3次元のデータとして受け取り、同じく3次元のデータとして次の層にデータを出力する。
畳み込み層は、画像処理でいうところのフィルター演算である。入力データとフィルター(重み、別名カーネル)を掛け合わせて、バイアスも加え、畳み込んだ出力データを作成する。
畳み込み層の積和処理(縦横の空間サイズが圧縮される)による処理の流れを絵図、数式で紹介。
パディング(周囲幅を0値で埋める)、ストライド(フィルター適用する位置の間隔)を紹介。
最終的に3次元の畳み込み演算で複数フィルターを利用した処理までイメージできるよう紹介。
プーリング層:
縦横方向の空間を小さくする演算。
例:2*2の空間を要約するように1つの要素にする。
・学習するパラーメータはない
・チャンネル数はそのままにする
・微小な位置変化に対してロバスト(頑健):入力データのズレを吸収
CNNで流れる一つのデータは3次元配列。
例:(1,28,28)
1チャンネル(色濃度の情報)、高さ28、横幅28、のデータ
チャンネル:1=MNISTデータは黒一色の文字判定のため1次元。色がついている場合はRGBで管理するとしたら3次元になる。
実装などではデータをバッチでまとめて扱ったりするのでバッチ数の次元が加わって4次元配列データとなる。
例:(10,1,28,28):バッチ数10、1色のデータ、縦28ピクセル、横28ピクセルのデータの場合
・畳み込み層、プーリング層の実装、CNNの実装
MNISTデータセットで学習
畳み込み層第1層のフィルターを画像表示
学習前はランダム初期化されていたため疎なノイズ画像だったが、学習後は規則性を持った模様画像になっている。
画像ごとに縦方向のエッジに反応するものと、横方向のエッジに反応するものなどが、模様から判別できる。
層が深くなるにつれて、抽出される情報(強く反応するニューロン)は抽象化されていく。
層が深い場合の例:最初はエッジに反応し、続いてテクスチャ、そして複雑な物体のパーツに反応するように変化する。
モノを意味を理解するように、反応する対象が変化していっている。
実装:
CNNの畳み込み層は、データ枚数、チャンネル、高さ、幅の4次元データで扱う。そこにパディングやストライドのハイパーパラメータを引数として畳み込み処理を実装している。検証のMNISTのデータは、単純な全結合層の場合は画像データ(28*28)をシリアライズして入力していた(4章の実装)が、畳み込み層はデータ構造を維持できるため、元のMNISTのデータ((バッチ数)、チャンネル数、高さ、幅)と、畳み込み層の行列の構造と一致しているので、そのまま読み込ませることができる。
---------------------------------------
8.ディープラーニング
層を深くしたディープなニューラルネットワーク。
・mnistによる画像識別分類するCNNの実装
mnist問題の性能が良いモデルのランキング上位はCNN
層が深くなくても性能が出る(畳み込み層2、全結合層2程度)
手書きの数字という単純な問題のため、ネットワークの表現力をそこまで高めなくても良い。
層を深くすることのメリット:
・パラメータ数が少なくなる。
例:5*5を1つに要約する2層の場合は25個のパラメータが必要
5*5を3*3のフィルターで1つの要約にする3層の場合は、3*3の畳み込みを二回で済む
ので、3*3*2=18個のパラメータですむ。
層が深くなるほど、パラメータ数を抑える恩恵が増える。>より大きな入力を小さなパ
ラメータ数で扱える。
・学習データ数が少なくても効率的に学習できる。
認識精度を上げる的ニック:訓練画像を人工的に拡張水増し
・位置ずらし
・画面歪み
・回転
一般画像では、輝度の変更、拡大縮小も有効。
ディープラーニングの高速化:
・GPU利用
・複数台分散学習
・演算ビット削減:精度が低くても(ノイズが乗っても)ディープラーニングの出力結果は変わらない頑健性がある。
ディープラーニングの利用:
・物体検出
・セグメンテーション:画像に対してピクセルレベルで被写体の区分けクラス分類を行う
・画像キャプション:画像に説明文章を生成
ディープラーニングの未来:
・画像スタイル変換:写真をゴッホ調に変換など
・画像生成:まったく新しい画像の生成
・自動運転
---------------------------------------
付録A:Softmax-with-Los レイヤの計算グラフ
以上。
- 2024年8月7日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入ニューラルネットワーク、ディープラーニングの入門として購入しました。基本的な考え方、数学的理論、Pythonのソースコードとバランス良く書かれています。特に誤差伝播法の章は、計算グラフを用いた説明が分かりやすい。初版から数年経過していますが、本書は基礎を網羅しており、現在でも入門書としては最適だと思います。
- 2024年9月12日に日本でレビュー済みフォーマット: 単行本(ソフトカバー)Amazonで購入といいつつ、機械学習は未だ掴み切れず、あまり他の書籍も読んでいないので比較はできませんが、単純にこの書籍は自分にはぴったりでした。
python自体にそう精通していなくてもよいですが、何となくスクリプト系プログラムなら何でも弄れる感じと大学1年生の線形代数、微分が分かるくらい以上の人であれば内容がよく理解できると思います。
その辺のAIとは関係ない基礎知識がないときついかもしれません。
理系大学一年生以上のプログラムを多少嗜む方で、これから最新のAIを学びたい人(熟年社会人ですが私もその一人)が、基礎力(大事)を身につけるには最高の一冊だと思います。
私はプログラマーですがpythonの習熟度は低く、前述の通りニューラルネットワークに関しては文系的知識(よくみかける図とか脳のニューロンっぽいものという字ずらだけの知識)程度でしくみは全然理解できていないという状態でしたが、この本で何となく掴めました。
この日進月歩の時代に2016年発行と少し古いのが気になるかもしれません(私もその点は少し気になりました)がこの本で扱っている基礎的な部分は今も変わっていないと思います。
コードはDockerコンテナにしなければ全て手直しなく動きました(WSL上のUbuntu22.04で確認)。
環境を汚したくなかったのでコンテナには私が勝手にしたもので書籍には手順の記載はありません。
(結局3章の画像表示の確認の為に、Ubuntu直にインストールしてしまいましたが、matplotlibに修正してまたコンテナに戻りました)
3章のMNISTの数字データを表示するのに、from PIL import Image を使っていますが、Dockerコンテナではこれだけはコンピュータ内の別の画像表示プログラムを起動する関係で動きませんでした。
しかし、これmatplotlibで行けるでしょと思って、そうしてみたらうまく動きました(matplotlibで事足りるはずなのに、ここだけ Imageを使っているのが謎(pythonライブラリーのImageの紹介かも))。
「作って学ぶ」ではあるのですが、コードを読んで動かしてみるばかりでなかなか自力で作るという事は無く進みました。しかしついに作る時がきました。
4章、5章のプログラムが2層だったので、それを3層、4層に変えたりその中で活性化関数を変えてみたり各層の次元(ニューロンの数)を変えてみたり、5章はグラフ表示がなかったので追加してみたりなど、簡単な変更が行えて、numpy, matplotlibなどの使い方も覚える事が出来てすごく楽しい本でした。
(3章のMNISTのデータをmatplotlibで表示できた時も嬉しかった(ビジュアル系は感動しますね))
わざと手直し、追加をできるような余白を残していたようにも思います。
学習とは勾配を見て損出を減らす方向にパラメータを調整する事、広大な空間のある初期値から学習で、そのパラメータが見つけられる事、見つけ方(この書籍に書いてある事だけではないに違いない)がよくわかりました。ニューラルネットワークが見えた感じです。
sigmoid関数の起源(こんな変な関数どうやって見つけたか気になった)等はググって調べました。
その辺の歴史書的な話題が入ってくると分かりにくい本になったと思うので、そういうところはカットしてもらって正解だったと思います。
まだ、シリーズ中これ一冊しか読んでませんが、この本でニューラルネットワークをしっかり捕らえられた感があったので、他のシリーズも読んで最近のAIにまつわる技術的な骨太な基礎力を身につけたいと思いました。










