秋月のNTCサーミスタ使ってみる.
使用方法のメモ
- サーミスタによる電圧降下からサーミスタの抵抗値を算出
- サーミスタの抵抗値から温度の算出は以下の資料に基づいて行うhttp://akizukidenshi.com/download/ds/akizuki/%E3%82%B5%E3%83%BC%E3%83%9F%E3%82%B9%E3%82%BF%E6%8A%B5%E6%8A%97%E5%80%A4%E8%A8%88%E7%AE%97%E6%96%B9%E6%B3%95.pdf
秋月のNTCサーミスタ使ってみる.
日本語訳に参加させていただいた書籍は下記のリンクから読めます!
オリジナル書籍:Neural Networks and Deep Learning
日本語版書籍:ニューラルネットワークと深層学習
量子コンピューティング分野の物理学者Michael Nielsenという方の執筆したオンライン書籍です。
この書籍の内容はニューラルネットの入門者向けとなっています。
「なぜ?」の部分について詳しく、そしてとても分かりやすく記述されていておすすめです。
本書を読むと、例えば以下の疑問について説明できるようになります。
個人的には、深層学習を学び始めた人が、
ゼロから作るディープラーニングの次に読むべき書籍は本書だと思っています。
2017年1月から、機械学習を入門し始めました。
その中でも特に流行りのニューラルネットにキャッチアップしようと、
ゼロから作るディープラーニングとかStanfordの教材CS231nとか一通りさらいました。
誤差逆伝播法や畳込みを理解して、どんどん楽しくなっていったのを覚えています。
その直後、そろそろ論文読める頃かなとmaxoutの論文を読み始めたら、
「universal approximator theorem」という言葉が出てきて、
調べてたどり着いたのがこのオンライン書籍。
ニューラルネットの本質を初心者でも分かるように、丁寧に説明してくれています。
「なぜ?」に答える内容により知的好奇心を刺激されて、勉強の楽しさを再確認でき、
単純に読んで良かったと思えた本でした。
しかし日本語版は1~4章までしか出ておらず、5,6章はまだ翻訳されていない模様。
というのもそもそもオリジナル(英語版)の6章が書かれたのが最近でした。
英語が大好きな(≠得意な)私としては、これは翻訳作業を楽しめてさらにOSS貢献までできるチャンス!と思い、
翻訳プロジェクト参加を申し出たのでした…
私が翻訳を担当したのは、以下の2章です。
スケジュール | 進捗 |
---|---|
1/26 | 翻訳しようと決心 |
1/26-1/30 | 5章翻訳 |
1/31-2/2 | 5章翻訳の校正(1回目) |
2/3-2/4 | 5章翻訳の校正(2回目) |
2/4 | 5章をpush |
2/5-2/13 | 6章翻訳 |
2/14-2/16 | 6章翻訳の校正(1回目) |
2/17 | 6章翻訳の校正(2回目) |
2/17 | 6章翻訳をpull request |
「機械学習に対して、にわか知識しかない私なんかが翻訳なんてやっていいのかな」と思っていましたが、
参加表明してみると温かく迎えていただけて、
また何か質問すると、優しく教えて貰えました。
下に記述したように自身の勉強になりますし、
そもそも訳していく作業自体が本当に楽しかったので、
参加してよかったなと思っています。
正しく翻訳しようとすると、内容を深く理解する必要があります。
そのため、少しでも不明な点があると、調べて自分の中で解釈を確定させてから日本語化する、ということを行っていました。
おかげで、単に英語を読むだけのときの30倍くらい時間かかりました(体感)
普段ちゃんと理解していないのかな、と思いました。
私の訳した部分の中では特に、勾配爆発や勾配消失の起きる要因について、
完全に頭の中で整理できたことが一番の収穫でした。
原典のニュアンスを残しつつ、日本語として読みやすくするのは難しかったです。
どちらかを妥協する必要があります。
今回は、原典が入門者用の読み物であり平易にわかりやすく書かれていたため、
日本語訳もわかりやすさ重視で意訳気味に行いました。
温かく迎えてくださった翻訳プロジェクトの方に心から感謝しています。
(後から気づいたのですが、翻訳メンバが豪華でした…)
技術翻訳初めての経験でしたが翻訳作業自体を、大変楽しめました!
もし誤訳等ございましたらお知らせください(もしくは修正ください)
オリジナル書籍:Neural Networks and Deep Learning
日本語版書籍:ニューラルネットワークと深層学習
プロジェクトを管理されている方によるプロジェクト概略
平易な言葉で本質を教えてくれる本書のような情報源は貴重。
この類の本をどんどん読んで吸収していきたい。
鏡に美しさを示す関数を教えよう、というところから始まるのだが、
鏡が博識&有能すぎて教えるどころではないというところ。
子供はおそらく最初は教師なし学習をしている。
周りの風景を見渡して、世の中の風景や聞こえる音、匂いなどを学習して雰囲気を学ぶ。
そのものが何なのかは知らないけど、こういうものだということを学んで、記憶の中で整理している。
だんだん成長するにつれ、周りの大人の言うことや本などを読むことにより、それが何だったのかという理解をすることで教師あり学習を行っている。
Aという変数を2倍したものとBという変数を3倍したものを足す。
Aという変数を3倍したものとBという変数を2倍したものを足す。
これらをそのまま足し合わせると、
Aという変数を5倍したものとBという変数を5倍したものとなり、
結局1度の掛け算と足し算で表現できてしまい、複雑にならない。表現力が上がらない。
そこで非線形変換を施すことで、複雑さを作れる。
非線形変換を施す関数のことを活性化関数と呼ぶ。
特徴量に重みを掛けて足し上げて0になるところと、1になるところの境。
識別面をデータの点からの距離、マージンが大きくなるように調整する。
そのマージンをできるだけ広げるように分離超平面を動かす方法をサポートベクターマシンと呼ぶ。
サポートベクターマシンはそれなりに汎化性能が良い。
ただ分けるだけを目的にすれば、そんなことは考える必要はない。
分けるために識別の誤差を最小にするわけだが、サポートベクターマシンは識別の誤差だけでなく、マージン最大化、データが示す点と分離超平面の間の距離を最大化するという両者の要素を考慮する。
線形変換は伸縮させたり、回転させたり。
非線形変換はグシャッと変形するイメージ。
特徴量をそのまま使うのではなく、非線形変換でグシャッと変形して使うというのがカーネル法のアイデア。
回帰や識別に使った特徴量の中から本当に大事なものは何か?
ということを念頭に置いて、あまり重要でない特徴量にかかる重みをゼロにする工夫の仕方がある。
そうして残った特徴量、その組み合わせだけが重要であるという特徴量選択が実現する。
データの本質をつかむためにゼロを探す。
そうやってほとんどゼロになっている状況をスパースという。
そのように仕向ける方法論をスパースモデリングという。
場所ごとの関係性を設定したモデルをボルツマンマシンと呼ぶ。
ボルツマンマシンに、画像のデータを見せて、そのデータに合わせていくことで、実際の画像の特徴、どのピクセルには何色が出やすいか、隣同士の関係性がどういう傾向にあるのか、それを学ぶ学習をボルツマン機械学習という。
ボルツマン機械学習では双方向型のニューラルネットワークを利用する。
最適化問題を解いた後の世界の姿が私たちが目にする世界
データとして得ることができない、見えない部分を隠れ変数という。
データとして取得可能な部分を可視変数という。
可視変数をピクセル、
可視変数同士を結びつける関係、それが隠れ変数のスイッチとしての役割とする。
可視変数同士、つまりピクセル同士にも関係がないように制限して、
さらに隠れ変数同士、スイッチ同士にも関係がないように制限したものを制約ありボルツマン機械という。
制限ありボルツマン機械の場合はサンプリングが簡単。
可視変数のサンプリングをして、その後、隠れ変数のサンプリングをして、と交互に繰り返すだけで良い。
http://postd.cc/a-beginners-guide-to-restricted-boltzmann-machines/
中間層は入力を反映した何かになる。
もともと入力されたものをグシャッと変形させたものだが、もとに戻せる程度。
入力から重要な部分だけを抽出する。
こうやって特徴量の下図を減らすことを次元圧縮という
重要な特徴量をあぶり出すことを、自己符号化を利用した事前学習で行う。
教師データがたくさんある場合は、事前学習なしでよい。
事前学習は教師なし学習なので、答えが分かってないデータも利用できる。
こうすることで多層ニューラルネットの潜在的な性能を引き上げられる。
Michael Nielsen著のオンライン書籍Neural Networks and Deep Learningを読んで、
覚えておきたいと思ったことのメモ。
ゼロから作るディープラーニングのネタ元は、
CS231nとばかり思っていたけど、
今となっては、真のネタ元はこのオンライン書籍だと確信している。
言い回しとか、コード例とかが瓜二つ。
こちらの書籍、なんと有志がプロジェクトを作って日本語訳を勧めているそう。
ぜひ翻訳参加してみたい。
追記:5章、6章の訳を担当させていただけました!
一層目のパーセプトロンは入力に重みをつけて、単純な判断をしている。 二層目のパーセプトロンは第一層のパーセプトロンよりも複雑で、抽象的な判断を下しているといえそう。
バイアスはパーセプトロンが1を出力する傾向の高さを表す量だとみなせる。 あるいは、生物学の例えを使えば、バイアスとは、パーセプトロンというニューロンが発火する傾向の高さを表すといえる。
なぜ誤差関数を導出するのか?
結局のところ、われわれが知りたいのはどれだけの画像がネットワークによって正しく分類されたかではないのか?
分類が成功した回数を最大化せずに、誤差間薄を最小化するのはなぜ?
その理由は分類の正解数が、ネットワークの重みとバイアスのなめらかな関数にならないことにある。 重みとバイアスに小さな変更を加えても、正解数が変化することがほとんどないため、コストを改善するのに重みとバイアスをどう変更したら良いかわからない。 代わりに誤差関数のような滑らかな関数を用いた場合、重みとバイアスに対してどう微小に変更を加えれば改善できるかが簡単にわかるようになる。 これが誤差関数の最小化を用いる理由であり、2次コストの最小化をした後で初めて分類の精度を調べることにする。
オンライン学習とは、ニューラルネットワークの一回の学習を一つの訓練入力で行うこと。
人間とおなじ方法。
以下の4つの式を覚えておくと、 ニューラルネットに施すテクニックの理由や、その影響を説明できるようになる。
出力層での誤差 に関する式
誤差 での誤差 に関する式
(直観的には誤差をネットワークとは逆方向に伝播させている)
任意のバイアスに関するコストの変化率の式
任意の重みについてのコストの変化率の式
二乗和誤差の勾配計算の際に、 の項が、学習の速度低下を引き起こしていた( があると、勾配消失しやすいため)。 の項が初めからないような、勾配の式から出発し積分することで交差エントロピー誤差の式を導出した。
驚きの尺度。 出力が期待通りだとあまり驚かないし、期待していないものだと強く驚く。
この正規化項にバイアスを含まない。 その理由は、もし、バイアスが大きくなっても、重みが大きくなったときのように、入力に対するニューロンの感受性が高まるわけではないから。 だから、大きなバイアスのために、訓練データのノイズを学習してしまうのではないかと心配する必要はない。 同時に、大きなバイアスを許すことで、ニューラルネットワークはより柔軟に振る舞えるようになる。 特に大きなバイアスを許すことで、ニューロンの出力が容易に飽和できるようになる。 時に、この性質が望ましい場合がある。
ニューラルネットワークの大部分で小さな重みをもつとする。 重みが小さいということは、ランダムな入力を変化させてもニューラルネットワークの振る舞いが大きくは変わらないことを意味する。 そのため、正規化されたニューラルネットワークでは、データに含まれる局所的なノイズの効果を学習しづらくなっている。 その代わり、正規化されたニューラルネットワークは訓練データの中で繰り返し観られるデータの特徴に反応する。
対照的に、大きな重みを持つニューラルネットワークは、入力の小さな変化に敏感に反応してその振る舞いを大きく変えてしまう。 そのため、正規化されていないニューラルネットワークは、大きな重みを使って、訓練データのノイズに関する情報を沢山含んだ複雑なモデルを学習してしまう。
要するに、正規化されたニューラルネットワークは訓練データに頻繁に現れるパターンに基づいた比較的シンプルなモデルを構築する。 そして、訓練データが持つノイズの特異性を学ぶことに対して耐性をもつ。
ニューラルネットワーク(NN)のUniversal approximator theoremは, NNによる関数の近似性を示すもので,NNの強力さを物語る.
ただし,以下の2点の注意点がある.
そうではなく,好きなだけ近い近似関数を得られるということ 隠れ層のニューロンを増やすことで近似の精度を上げられる.
計算したい関数f(x) とepsilon > 0が与えられたとして, 十分な数の隠れ層のニューロンを用いると,出力g(x)が|g(x)-f(x) < epsilon|を任意の入力xに対して満たすNNを常に見つけられることをuniversal approximator theoremは示している.
不連続な関数は,NNを用いた近似は一般的には不可能
活性化関数をsigmoidととると,
Stanford大の教材CS231nを使ってNNやCNNを学んでいる.