備忘録とか日常とかスマートフォン用の表示で見る備忘録とか日常とか学んだこととかを書きます。この広告は、90日以上更新していないブログに表示しています。python機械学習に関する色んな書籍が世の中には出回っている。星の数ほどはないかもしれないけどかなりの数あると思う。最近は「実装しながら説明していくよ!」という本も増えているそう。自分みたいなコーディングどへたくそな人間にとっては凄くありがたい(そして英語の勉強にもなる)。そんな背景もあって以下の本を読むことになりました。Processesと、かなり盛りだくさんである。全部読めばそれなりの知識が得られそうではあるが、さすがにしんどいのでまずは3,4章を読んでいく。理論的な部分はかなり省略されており、入門用の本なのだと思う。あと完全に自分が頭の中を整理するためのものなので、読んでても参考にはなりません。Neuron動物の脳を模倣したモデルを再現したら機械学習できるんじゃね?ってことで生まれた、パーセプトロンについての概要。脳内のニューロンを模したモデル。脳内の化学物質(入力)によってニューロン内の電位が変動し、ある閾値を超えるとニューロンが発火する。その出力(発火するかしないか)がそのまま別のニューロンの入力となる。ニューロン同士のつながり(シナプス)には強さがある。よると、発火しやすい二つのニューロンをつなぐシナプスは強固なものとなり、逆だとつながり弱くなる(最終的にはなくなる)。これによって他のニューロンへの入力を制御できる。ニューロンを数学的にモデリングした。ニューロンが発火するかしないかを決定するパラメータである。出力oは以下で決定する。これは最も単純なモデルであるが、ちゃんと機能する。実際のニューロンと異なる点も多々あるため留意する。例としてはモデルは単一の出力しか返さないが、実際のニューロンの出力はパルス波の連続であり、それ自体が情報量を持つ。モデルの閾値はコンピュータのクロックごとに更新されるが、実際のニューロンは非同期的で(asynchronously)ランダムに更新されるさらに重み(シナプス)に関しても違いがある。シナプスには興奮性(excitatory)のものと抑制性(inhibitory)のものがあり、モデルの重みではこれらを正負で表している。フィードバックの構造がなかったり...と色々違いはある。それらを改良したモデルも存在するが、現段階でも十分に興味深い結果が得られるとのこと。様々な非線形関数に変えて使用する。Networksある訓練データの特徴を学習し、未知のデータに対して、データやラベルを予測する。学習はニューロンの重みと閾値を変えることで行われる。ここで問題となるのが、どのようにしてそれらのパラメータを更新するかである。Perceptronニューロンを並べて層を作ったのがパーセプトロン。学習データとその目標値を与えることで、重みを更新していく。閾値はニューロンごとに別々に設定するのは困難なので、入力項とまとめて考える。バイアスノードからは常に1または-1が入力され,重みを調整することで閾値を変えていく。ここでは-1を入力とする。重みの初期値は乱数で決定する。0.05]くらいとする。学習アルゴリズムは以下。XORの二値分類を解いていく。下の図のようなモデルを使い、実際に学習を行う。biasの重みである。(biasの入力は常に-1であることに注意)見てみると、ANDとORは正解に収束しているが,XORはうまく解けていないことがわかる。これはパーセプトロンが非線形問題を学習できないことによるものである。工夫するとパーセプトロンでこの問題が解ける。以下のように、入力を一つ増やしてやる。XORの点を3次元に落としてやることで、線形関数でも分類ができるようになるわけである。先ほどと同じコードを使ってやった結果↓13iterationでXORが解けていることがわかる。(1)はてなブログをはじめよう!may46onezさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。