eyecatch
Tue, Jan 16, 2018

CourseraのDeep Learning SpecializationのStructuring Machine Learning Projectsコースを修了した

CourseraのDeep Learning SpecializationのImproving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimizationコースを修了したのに続き、Structuring Machine Learning Projectsコースを修了した。 (adsbygoogle = window.adsbygoogle || []).push({}); このコースは、深層学習プロジェクトの進め方のコツや問題への対処方法などについて学べる2週間のコース。 今回はプログラミング課題がない。 動画は今のところ全部英語。 ちょっと動画編集ミスが多かった。 同じことを二回言ったり、無音無絵の時間があったり、マイクテストしてたり。 2018/1/13に始めて、1/15に完了。 3日間かかった。 修了したらまたCertifacateもらえた。 以下、2週分の内容をメモ程度に書いておく。 1週目 モデルの改善をするのに、データを増やしたりハイパーパラメータを変えたり色々な手法がある。 一つを試すのに下手すると数か月とかかかるので、効率よく手法の取捨選択し、モデルを改善していくための戦略について学ぶ。 動画 直交化(Orthogonalization) 一つの要素で複数の制御をしようとすると難しいので、一つの制御だけするようにする。 具体的には、以下のことを別々に扱う。 訓練データに目標の精度までフィットさせる。 devデータに目標の精度までフィットさせる。 テストデータに目標の精度までフィットさせる。 現実のデータでうまく動くようにする。 それぞれの目的について、チューニングすべき要素は別々になる。 早期終了は直行化の原則に反しているので、ほかの方法があるならそっちをやったほうがいい。 指標(Goal)の設定 モデルの改善はイテレーティブなプロセスなので、サイクルを速く回したい。 そのため、モデルを評価する単一の数値があるといい。 F1スコアとか。平均とか 単一の指標にまとめるのがむずいときもある。 精度と速さとか。 そんなときは一つ以外の指標を足切りだけに使う。 ある閾値以上の速さが出てるもののなかで精度をくらべるなど。 データの分け方 devデータとテストデータの分布(と評価指標)は同じ感じにしないといけない。 そのために、いったん全データをシャッフルしてから分割する。 訓練データの分布は異なってても問題ない。 訓練:テスト = 70:30とか、訓練:dev:テスト = 60:20:20とかいう比率は、1万くらいのデータなら適当。 けど100万くらいなら、98:1:1くらいが妥当。 テストデータはモデルの最終評価をするためのものなので、どれだけ評価したいかによってサイズを変える。 0もありがちだけど、非推奨。 猫の画像のなかにエロ画像が混じっちゃうようなモデルはだめ。 猫判定率が多少下がっても、エロ画像が含まれないほうがまし。 こういう場合は評価指標を変える必要がある。 エロ画像を猫と判定した場合にペナルティを大きくするなど。 直行化の観点で言うと、指標を決めるのと、その指標に従って最適化するのは、別のタスクとして扱うべき。 人並性能(Human-level performance)との比較 人並性能とは、人が手動で達成できる精度。そのエラー率、つまり人並誤差(Human-level error)はベイズ誤差(Bayes
eyecatch
Fri, Jan 12, 2018

CourseraのDeep Learning SpecializationのImproving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimizationコースを修了した

CourseraのDeep Learning SpecializationのNeural Networks and Deep Learningコースを修了したのに続き、Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimizationコースを修了した。 (adsbygoogle = window.adsbygoogle || []).push({}); このコースは、ディープニューラルネットワークのチューニングなどについて学べる3週間のコース。 今のところ全部英語。 2018/1/5に始めて、1/12に完了。 8日間かかった。 修了したらまたCertifacateもらえた。 以下、3週分の内容をメモ程度に書いておく。 1週目 OverfittingやUnderfittingを防ぐテクニックについて。 動画 データ分割 深層学習のモデル構築は、検討(Idea)、実装(Code)、検証(Experiment)というサイクルの繰り返し(Iterative process)。 取り組む課題、課題のドメイン、データ量、マシンの構成などにより、ハイパーパラメータは変わるので、経験をもって事前に予測することは無理なので、サイクルをどれだけ速く回せるかが鍵。 データは、訓練データ(Training set)、Devデータ(Development set))(a.k.a. Cross-validation set)、テストデータ(Test set)に分割する。 訓練データで学習し、Devデータでハイパーパラメータを評価し、テストデータで最終的な評価と性能見積をする。 テストデータは無くてもいい。 サンプル数が1万くらいだった時代は、6:2:2くらいで分割してたけど、近年は数百万とかのデータを扱い、交差検証データやテストデータの割合はもっと小さくするのがトレンド。 98:1:1など。 Devデータとテストデータは同じようなものを使うべき。 訓練データは必ずしも同様でなくてもいい。訓練データは沢山要るので、別のデータソースからとることもある。 バイアス vs バリアンス でかいネットワークで正則化して大量データで学習させるのが吉。 正則化 過学習(Overfitting)を防ぐため、コスト関数を正則化(Regularization)すべし。 ロジスティック回帰ではL2ノルム(L2 norm)を使ったL2正則化が一般的。 L1正則化はあまり使われない。 L1正則化をすると、wがスパース行列になってモデルを圧縮できると言われることがあるが、経験上その効果はほとんどない。 正則化パラメータλはハイパーパラメータで、Devデータで評価する。 ニューラルネットワークでは正則化項にフロベニウスノルム(Frobenius norm)を使う。 Dropout(Inverted Dropout) ランダムにノードを無効化しながら学習することで過学習を防ぐ。 画像処理の分野では、特徴量の数が多く学習データが少ない傾向があるので、ほぼ常に使われる。 コスト関数が計算できなくなるのが欠点。 計算する必要があるときにはDropoutを無効化する。 データ拡張(Data augmentation) データを加工して増やせば、高バリアンス対策になる。 早期終了(Early stopping) 過学習するまえに学習を止めるテクニック。 訓練データとDevデータについてコストをプロットして、Devデータのものが上がる前に止める。 これは、直交化(Orthogonalization)の原則、つまり一度に一つのことを考慮すべきという原則に反していて、コストを最小化するという問題と、過学習を避けるという問題に同時に対処することになるので微妙。 普通は代わりにL2正則化使えばいいけど、λを最適化する手間を省きたいときには選択肢になりうる、というか実現場ではちょくちょく選択肢になる。 訓練データの正規化(Normalization) 訓練データの各特徴量について平均を0にして分散を1にすると学習が速くなる。 訓練データを正規化したらテストデータも正規化する。 その際、正規化パラメータは訓練データのものを使う。 勾配消失(Vanishing gradient)、勾配爆発(Exploding gradient) ニューラルネットワークの層が深くなると、層の出力や勾配が指数関数的に大きくなったり小さくなったりして、学習が難しくなる問題。 長年ディープニューラルネットワークの発展を妨げてきた問題。 パラメータのランダム初期化をすると防げる。 ガウス分布で作ったパラメータに特定の値を掛けてを分散が1/n(ReLUの時は2/n)になるように調整して、活性化関数に入力する値を約1に抑える。 掛ける値は活性化関数ごとにだいたい決まっていて((e.g.
eyecatch
Fri, Jan 5, 2018

CourseraのDeep Learning SpecializationのNeural Networks and Deep Learningコースを修了した

CourseraのMachine Learningコースに続いて、同じくAndrew先生によるDeep Learning Specializationを受講中。 これは深層学習の基本を学べるもので、以下の5つのコースからなる。 Neural Networks and Deep Learning Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization Structuring Machine Learning Projects Convolutional Neural Networks Sequence Models この内、最初のNeural Networks and Deep Learningを修了したので、記念にブログしておく。 (adsbygoogle = window.adsbygoogle || []).push({}); Deep Learning Specializationとは Deep Learning SpecializationはCoursera Specializationのひとつ。 Coursera Specializationはサブスクリプションモデルで、つまりあるSpecializationのサブスクリプションを購入すると、受講完了するまで毎月定額の料金を支払うことになる。 Deep Learning Specializationは月$49で、5コース合わせて13週+α分の内容。 (Sequence Modelsが2018年1月に公開予定となっていて、現時点でまだ公開されていないので内容が不明。) 最初の7日間はトライアルで無料なので、この間に全部終わらせられればタダ。 無理だけど。 Deep Learning Specializationでは、PythonとTensorFlowでディープニューラルネットワーク、CNN、RNN、LSTM、Adam、Dropout、バッチ正規化、Xavier/He initializationなどを学べる。 Machine Learningコースと同じく、5分~15分くらいの動画による講義と、小テストと、プログラミング課題から構成されている。 プログラミング課題は、coursera hubという、ホステッドJupyter Notebookで解いて提出できるので楽。 Neural Networks and Deep Learningコースとは ディープニューラルネットワークの仕組みを学んで実装する4週間のコース。 また、深層学習の偉い人へのインタビューを見れる。