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週間のコース。 また、深層学習の偉い人へのインタビューを見れる。
eyecatch
Fri, Dec 22, 2017

CourseraのMachine Learningコースを修了した

機械学習の入門教材として有名なCourseraのMachine Learningコースを修了した記念日記。 (adsbygoogle = window.adsbygoogle || []).push({}); Courseraとは Courseraは、2012年にスタンフォード大学のコンピュータ工学科の2人の教授によって設立されたサービスで、世界トップクラスの大学の講座をオンラインで受けることができるもの。 東京大学とも提携している。 講座の一部は無料で受けることができる。 CourseraのMachine Learningコースとは Machine Learningコースは、Courseraの設立者の一人であるAndrew Ngによる、機械学習の基礎から実践まで浅く広く(?)学べる世界的に有名な講座。 Andrew先生は一時期Googleで働き、Google BrainというDeep Learningのプロジェクトをリードしていたこともある機械学習のエキスパートで、さらにスタンフォードの教授だっただけあって教え方が非常にうまくてわかりやすい。 この講座は主に、5分~15分くらいの動画による講義と、小テストと、プログラミング課題から構成されている。 1週間分の内容が、1.5時間分くらいの動画と、15分くらいでできる小テストと、2、3時間で終わるプログラミング課題で、全体で11週間分やれば修了できる。 1、10、11週目はプログラミング課題が無くてすぐ終わる一方、3~5週目辺りは結構ハード。 私は2017/10/30に始めて、2017/12/19に完了したので、ちょうど50日かかったことになる。 動画は当然英語だが、有志により英語や日本語の字幕が付けられてるので聞き取れなくても問題はあまりない。 ただ、1~4週目くらいまでは、日本語の字幕がずれている動画が少なくなく、それらは英語の字幕でみる必要がある。 1つだけ英語の字幕もダメなものがあって、それだけは字幕なしで見た。 プログラミング課題は、Octaveというオープンソースの数値解析言語で解く。 聞いたことない言語だったが、MATLABとの互換性維持を重視して開発されている言語なので、まあ覚えておいて損はない。 Octaveグラフ描画APIは、MATLABのグラフ描画APIをまねていて、MATLABのグラフ描画APIは、Pythonでよく使われるグラフ描画ライブラリであるMatplotlibがまねていて、つまりOctaveやってるとMatplotlibの勉強にもなる。 以下、11週間分の内容を、キーワードレベルで書いておく。 1週目 機械学習の概要 背景、歴史、活用例。 教師あり学習(Supervised learning) vs 教師なし(Unsupervised learning)。 線形単回帰(Linear regression with one variable) 仮説関数(Hypothesis)、目的関数(Cost function)、平均二乗誤差(Mean squared error)、最小二乗法(Least squares method)、最急降下法(Gradient descent)。 行列 行列(Matrix)とベクトル(Vector)。 行列演算。 逆行列(Inverse)、転置行列(Transpose) 2週目 線形重回帰(Linear regression with multiple variables) 特徴量のスケーリング(Feature scaling)、平均正則化(Mean normalization)。 学習率(Learning rate)。 多項式回帰(Polynomial regression)。 正規方程式(Normal equation)、特異行列(singular matrix)。