Giter VIP home page Giter VIP logo

Comments (21)

hazhikko avatar hazhikko commented on September 28, 2024

1.1 パーセプトロン

単純パーセプトロンとは
■概要
・複数の入力と単一の出力を持つ
・出力は0か1のどちらかの値になる
・それぞれの入力値X1~Xnに対して重みW1~Wnと、それに無関係なWn+1がある

この数式は直線状で表すことができ、入力値と出力値を調整することで対応した境界線を引くことができる。

■目的
・異なる種類のデータを分類する境界線を発見すること
・データを与えられたとき、境界線のどちらにいるかで属性を推測することができる

■欠点
・入り組んだ境界線など、直線状で引けない問題には対応できない

■参考
一番簡単な単純パーセプトロンについて

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.1.1 最初のKerasのコードの例

Sequentialモデルとは
■概要
・Kerasの最も単純なモデル
・ニュートラルネットワークの層を積み上げて作成する
・Layerの中にPerseptronが並んだ塊が複数直列に並んでいる
・Layerの中にあるPerseptronが次のLayerに信号を送り、最後のレイヤーまで届ける

■Layerの型
・Kerasには複数の型が用意されている
・サンプルでよく見るDenseは個々のパーセプトロンが次のLayerのすべてにつながる

■kernel_initializer
・各ニューロンの重みの初期化方法の指定

△一般的なもの
random_uniform
・任意の小さい値(-0.05~0.05)の範囲でランダムに初期化
・既定の範囲内の値が集まっているイメージ

random_normal
・平均が0、分散が0.05の正規分布に基づいて重みを初期化

zero
・すべての重みを0にする

その他
Initializer
Ones
Constant
TruncatedNormal
VarianceScaling
Orthogonal
Identity
lecun_uniform
glorot_normal
glorot_uniform
he_normal
lecun_normal
he_uniform
Using custom initializers

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.2 多層パーセプトロン:最初のネットワークの例

多数の層を持つネットワークのことを多層パーセプトロンという。
Multilayer perceptron、略称: MLPと呼ぶ場合がある。

■ニュートラルネットワーク
全層結合。
層内のニューロンは、前後のニューロンすべてと接続している。

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.2.1 パーセプトロンの学習における問題と解決策

■学習の理想
・学習データを用意する
・ネットワークが出力と学習の誤差を最小化するように重みとバイアスの値を最適化する

■パーセプトロンの欠点
・出力は1or0
・変化が大きすぎて、暫時学習(子供が少しずつ学んでいくような方法)ができない
・不連続ではなく、0から1へ漸次的に変化する関数=微分可能な連続関数が必要

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.2.2 活性化関数:シグモイド

■活性化関数とは
ネットワークの出力値を決定する関数のこと

シグモイド関数とは
・2つの入力値が得られたとき、0~1の小さな範囲で出力が変化する
・シグモイド関数を使用したニューロンは変化が穏やか
・2クラスの識別問題の場合に非常によく利用される
・犬を識別する画像認識があったとすると、犬である確率80%、のようなあいまいな回答が可能になる

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.2.3 活性化関数:ReLU

ReLU(Rectified Linear Unit, Rectifier)とは
・正規化線形関数とも
・マイナスの入力に対してはすべて0、プラスの入力に対しては線形に増加する

ReLUを使う意味
・学習制度を上げる際、前回の誤差に着目する
・差分が大きければパラメータをいじり、差分が小さければあまり変更しないようにする=微分値を使う
・シグモイド関数の場合、微分値が小さく誤差の微分がゼロになってしまい、学習がストップしてしまう
・ReLUは入力値が整数であれば、誤差の微分を0にすることなく次の学習につなげられる

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.2.4 活性化関数

Kerasでサポートしている活性化関数
・softmax
・elu
・selu
・softplus
・softsign
・relu
・tanh
・hard_sigmoid
・linear
これらとは別に、より高度な活性化関数もある

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3 実例:手書き数字認識

MNISTとは
・手書き数字のデータセット
・6万件の学習データと1万件の評価データが含まれている
・評価データは学習が正しくできていることを評価するために使用するので、学習データに含めてはいけない

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.1 one-hotエンコーディング:OHE

one-hotエンコーディングとは
・認識すべきカテゴリを数字に変換する
・対象が0~9までの数字dであるとすると、dが1、それ以外はすべて0の10次元・2進ベクトルと考えることができる
・分類を「対象がカテゴリに一致する/しない」の2択とすると、すべてn(カテゴリの数)次元・2進ベクトルと考えることができる

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.3 Kerasのシンプルなネットワークを動作させてベースラインとして設定

1.3.2 Kerasによるシンプルなネットワークの定義の学習の経過をグラフで出すように修正
処理の実行時間を計測して出力するように修正

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.4 隠れ層の追加による精度向上

■隠れ層とは
入力や出力に直接つながっていない層のこと。
精度を向上させるために追加する。

■検証
条件を変えてそれぞれ実行してみる。
正解率
V1 :0.9227%
V2_1:0.9462% # 用意されているV2のコード EPOCH20,隠れ層追加
V2_2:0.9588% # V2_1にさらに隠れ層を5層追加
V2_3:0.9712% # V2_2のEPOCHを200に変更

あまり深く考えずに修正を入れても、それなりに精度は向上した。
ただ、グラフを見ると
V2_1:きれいに上昇している
V2_2:途中で精度が上がらなくなった
V2_3:EPOCH50を過ぎたあたりから変化がなくなった
ということで、あまり効率は良くなさそう。

処理が増えれば増えるほど実行時間が長くなるので、無駄な処理はしないのが理想。

V1
V1
V2_1
V2_1
V2_2
V2_3
V2_3
V1

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.5ドロップアウトによる精度向上

■ドロップアウトとは
・学習時に一定の割合のノードの出力をゼロにする
・過学習を緩和することができる
・ランダムにノイズを入れることで、本当に重要な意味のある情報のみが残される

過学習とは
・学習に使ったデータに対しては正解率が高いが、他のデータに対する正解率が低い
・偏った学習をして汎用性をなくした状態
・データが少ないとき、モデルが問題に対して複雑すぎるときに起こる

■エポック数のチューニング
・学習データの精度は評価データの精度を超えるべき
・超えていない場合は学習が足りない
・それぞれが最高値になった場合、それ以上の学習は不要=過剰なエポック数を減らす

エポック20
評価データより学習データの正解率が低い
v3_1

エポック250
250辺りでわずかに逆転
これ以上の学習は不要
v3_2

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.6最適化アルゴリズムの変更
最適化アルゴリズムのみを変更し、精度の変化を確認する。

RMPpropとは
・AdaGradという最適化アルゴリズムを改良したアルゴリズム

Adamとは
・AdaGradやRMSProp,AdaDeltaを改良したアルゴリズム

SGDを含めた3種類を比較すると、Adam>RMSProp>SGDとなっている。

SGD 20epochでは収束していない
v3_1

RMSProp 16epochあたりでグラフが反転した
v4_1

Adam 12epochあたりからほぼ収束
v4_2

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.7 学習エポックの増加

学習回数を20回から200回に増やしたところ、学習時間が10倍になったものの精度は上昇しなかった。
モデルの精度を上げるには、適度な学習回数と最適なアルゴリズムを選ぶ必要がある。

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.8 学習率の制御

最適化アルゴリズムの学習率(パラメータの更新幅を制御するハイパーパラメータ)を変化させた結果、0.001に近い値=kerasのデフォルト値が最も精度が高かった。
学習率はそれぞれのアルゴリズムでよいパフォーマンスが出る値がデフォルト値に設定されているため、むやみに変更する必要はないかもしれない。

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.9 内部隠れ層の増加

隠れ層を増やした場合、一定の精度向上が認められる。
ただし、ネットワークが拡大するにつれ、拡大したことによる精度向上の幅は少なくなっていく。
隠れ層を増やすと処理時間も増えるため、処理時間に見合う数に抑えるのが最良か。

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.10 バッチ計算サイズの増加

■確率的勾配降下法
学習データ全体を用いてコスト関数の最小化を行う勾配降下法に対して、バッチサイズ分の学習データを用いてコスト関数の最小化を行う方法。
検証では、128が最も精度が高かった。

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.11 手書き数字認識の実験の要約

以下を行った結果、当初よりも学習制度が上がった。
・隠れ層の追加
・ドロップアウトの追加
・最適化アルゴリズムの変更

以下を変更した場合、多少の精度の上昇は見られたものの、同時に処理時間も増加するため、あまり良い方法ではなかった。
・ニューロン数の増加
・エポック数の増加
これらについては、それぞれ最適な値にチューニングする必要がある。

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.12 正則化――過学習を避ける

モデルの複雑さが増すと、以下の問題が発生する。
・処理時間の増加
・過学習

正則化で過学習を回避する
モデルが誤差を許容する柔軟さを失ってしまうと、未知のデータを考慮しない=過学習になってしまう。
そこで、正則化を行い、学習結果が偏るのを防ぐ。
機械学習では主に3種類の正則化が行われる。
・L1(ラッセル回帰)
・L2(リッジ回帰)
・エラスティックネット正規化

試しに、keras_MINST_V4_1.pyに無駄な学習をさせたkeras_MINST_V5_1.pyと、それにL2正則化を行ったkeras_MINST_V5_2.pyを用意した。
keras_MINST_V5_2.pyでは、学習の精度は大幅に減少したものの、評価の精度は保たれていた。

keras_MINST_V5_1.py
v5_1

keras_MINST_V5_2.py
v5_2

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.13 ハイパーパラメータチューニング

ハイパーパラメータチューニングとは
・ニューロン数やドロップ数などの各パラメータを調整し、より良いモデルを作る
・手動で調整するほかに、自動で調整する方法がある
・調整方法によって処理時間が大幅に変わる可能性がある

from learning_keras.

hazhikko avatar hazhikko commented on September 28, 2024

1.3.14 予測結果

以下を参考に、自分で書いた手書き画像を判定した
Kerasを使ってDroidくんを認識してみた

結果
白背景+カラー数字:正解数0/10
黒背景+白数字:正解数5/10

./source/deep-learning-with-keras-ja/ch01/color_white\0.png:5:100.0 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\1.png:5:79.7137 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\2.png:5:99.99365 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\3.png:5:99.89852 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\4.png:3:56.94342 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\5.png:3:37.32964 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\6.png:3:53.40275 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\7.png:5:99.99617 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\8.png:5:99.9923 間違い
./source/deep-learning-with-keras-ja/ch01/color_white\9.png:5:99.96269 間違い
./source/deep-learning-with-keras-ja/ch01/grayscale_black\0.png:2:92.31454 間違い
./source/deep-learning-with-keras-ja/ch01/grayscale_black\1.png:3:93.20578 間違い
./source/deep-learning-with-keras-ja/ch01/grayscale_black\2.png:2:100.0 正解
./source/deep-learning-with-keras-ja/ch01/grayscale_black\3.png:3:99.78989 正解
./source/deep-learning-with-keras-ja/ch01/grayscale_black\4.png:4:99.06922 正解
./source/deep-learning-with-keras-ja/ch01/grayscale_black\5.png:5:99.99999 正解
./source/deep-learning-with-keras-ja/ch01/grayscale_black\6.png:5:99.96178 間違い
./source/deep-learning-with-keras-ja/ch01/grayscale_black\7.png:3:97.84509 間違い
./source/deep-learning-with-keras-ja/ch01/grayscale_black\8.png:8:86.71989 正解
./source/deep-learning-with-keras-ja/ch01/grayscale_black\9.png:3:99.3636 間違い

from learning_keras.

Related Issues (17)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.