はい!今やってます!

Work Pertly, Live Idly

Angular4 関連

  • プロジェクト作成
ng new ${プロジェクト名}
ng new ${プロジェクト名} --style=scss
  • ng-bootstrap導入
# install
npm install --save intl@1.2.5 bootstrap@3.3.7 ng2-bootstrap@1.1.14

# angular-cli.json
"styles": [
    "../node_modules/bootstrap/dist/css/bootstrap.css",
    "style.css"
],

# src/app/shared/index.ts
import '../../../node_modules/ng2-bootstrap/bundles/ng2-bootstrap.min.js'

# src/styles.css
@import url("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css");
  • プロジェクト編集
ng set defaults.styleExt scss
  • モジュールを作成する
ng g module ${モジュール名}

AngularのNgModuleを使って、アプリの構成を管理する - Qiita

ng generate component ${コンポーネント名}
ng generate component ${モジュール名}/${コンポーネント名}
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
...

  schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
  • その他新規作成
ターゲット 概要 コマンド
Component コンポーネント ng g component my-new-component
Directive html要素の修飾や振る舞いの調整(ngIfとかも) ng g directive my-new-directive
Pipe データ変換(数値出力にカンマをつけるなど) ng g pipe my-new-pipe
Service サービス ng g service my-new-service
Class ng g class my-new-class
Guard ng g guard my-new-guard
Interface ng g interface my-new-interface
Enum ng g enum my-new-enum
Module モジュール ng g module my-module
  • サービスを追加する
ng g service ${サービス名}
  • カスタムディレクティブを作成する
ng g directive ${ディレクティブ例}
※ngIfとか
  • サーバーを起動
ng serve

NgModuleで指定可能なメタデータ

メタデータ 指定可能な種類
imports モジュール(他のNgModuleで定義されたモジュール)
exports コンポーネント ※import元で利用する時
declarations コンポーネント、パイプ、ディレクティブ
providers サービス(DI元のクラス)
entryComponents
bootstrap エントリーポイント(最初に呼び出すコンポーネント)
schemas

スタイルを適応する方法

適応方法 指定方法
定番 style="background-color:#ffffff;"
カプセルCSS class="test"
プロパティバインド [style.backgroundColor]="'#ffffff'"
ngStyle [ngStyle]="{'background-color':'#ffffff'}"
ngClass [ngClass]="{test:true}"
カスタムディレクティブ styles: [.test{background-color:#ffffff;}]

ルーター

<router-outlet></router-outlet>
RouterModule.forRoot([
  { path: "test/:id", component: TestComponent }
])

https://ng2-info.github.io/2016/03/component-router-by-gerardsans/

  • リンク・クリック時の処理の書き方
onClickButton(){
  this.router.navigate(["/test", this.value1]);
}
this.router.navigate(["/comp1", {"id": this.value1, "msg": this.value2}]);
<a [routerLink]="['/test', 12]" routerLinkActive="active">...</a>
<a [routerLink]="['/test', {'id': 123, 'msg': 'aaaa'}]"
  routerLinkActive="active">...</a>
<a routerLink="/test/1234" routerLinkActive="active">...</a>
constructor(private route: ActivatedRoute) {
  this.route.params.forEach((params: Params) => {
    this.id = params["id"];
  });
}

App Cache

  • src/assets/testApp.appcache
CACHE MANIFEST
#ver 1.0.0
CACHE
./favicon.ico
../inline.js
../style.bundle.js
../main.bundle.js
  • src/index.html
<html manifest="./assets/testApp.appcache">
  • キャッシュ状況を表示
chrome://appcache-internals/

Reference

https://albatrosary.gitbooks.io/start-angular/content/changelog.html

npm moduleをインストールするコマンド等

  • ローカルインストール + paclage.jsonの依存関係に追加
npm install --save ${module}
  • バージョン指定してインストール
npm install --save ${module@version}
  • グローバルインストール
npm -g install ${module}
  • インストールされているモジュール一覧
npm ls
  • キャッシュクリア
npm cache clear

Duplicateエラーが出る場合の対処法

MySQLでKey Duplicateのエラーが出る場合、

INSERT ... ON DUPLICATE KEY UPDATE

の構文を使えば解消出来る場合がある。

INSERT INTO
   ${table_name} (a, b, c)
VALUES
   (1, 12, 123)
ON DUPLICATE KEY UPDATE b = 22, c = 223;

直前に投げたSQLの結果件数を取得するSQL

Limit句に関係無く、検索対象の全件数を返してくれる。

SELECT SQL_CALC_FOUND_ROWS * FROM ${table_name} LIMIT ${limit_count};
SELECT FOUND_ROWS();

全〇〇件中 とか表示したい時に便利

【WIP】Oh-My-Shell Commands ~シェルコマンドの覚書き~

この記事について

空で打てなかったシェルコマンドをひたすら書き連ねる為の記事

特定の文字列を含むファイルを探す

  • 検索結果を含む
grep -rnw ./ -e "phrase"
  • ファイル一覧
find ./ -type f -print | xargs grep "phrase"

ディープラーニングの出力層について

ディープラーニングの出力層

ニューラルネットワークは分類問題と回帰問題に対して適応できますが、 出力層については分類問題と回帰問題とで活性化関数を変更する必要があります。
回帰問題 -> 恒等関数
分類問題 -> ソフトマックス
という風に使い分けられるのが一般的です。

分類問題と回帰問題について

分類問題は学習したものから、クラスを分類するようなものを指します。 たとえば、学習した野球選手の画像から所属する球団を分類するような場合です。 一方で回帰問題は連続的な数値の予測を行う場合に利用します。 例えば、観客席の画像から来場者数を推測する場合などです。

名前だけ難しい関数 “恒等関数”

恒等関数とは 恒等関数とは与えられた数をそのまま出力する関数です。 名前だけ難しそうに見えますが、何もしない関数です。

ソフトマックスについて

一方でソフトマックスは、各出力層が全ての入力の影響を受けます


\displaystyle y_k =  \frac{\exp(a_k)}{\sum_{i=1}^{n} \exp(a_i)}

分子は入力信号 \displaystyle a_k の指数関数、分母はすべての入力信号の指数関数の和から構成されます。

input = np.array([1, 2,...])
exp_input = np.exp(input)
sum_exp_input = np.sum(exp_input)
output = exp_input / sum_exp_input

※オーバーフロー対策が必要となる為、上記は実用的なコードではありません。

ソフトマックスで重要なのは、この関数の出力は0から1.0の間の実数になる点です。 この性質のおかげでソフトマックス関数の出力を確率として解釈することができます。

ソフトマックスの特徴は関数によって入力要素の大小関係が変わることがありません。 よって分類問題でも推論フェーズについてはソフトマックス関数が省略されることが一般的です。

【WIP】DeepLearning / 深層学習 基礎の基礎

ディープラーニングの概要

ディープラーニングとは?

どもでも読めるので省略

これが本当にわかりやすい http://www.yukisako.xyz/entry/backpropagation

基礎的な関数

ニューラルネットは関数の集まりです。

損失関数・誤差関数(loss)

どれだけ理想と乖離しているかを算出する為の評価関数。

ニューラルネットワークの学習の目的は損失関数の値をできるだけ小さくするパラメーターを見つけることです。 最適なパラメーターを見つけて、そのような問題を解くことを最適化と言います。 パラメーターの勾配(微分)を手がかりに、勾配方向にパラメーターを更新するステップを何度も繰り返して、徐々に最適なパラメーターへと近づけていくのです。

損失関数・誤差関数の種類

  • 二乗和誤差(mean squared error)
  • 交差エントロピー誤差(cross entoropy error)

損失関数・誤差関数のテクニック

  • クリッピング(LossClipping)
    誤差が1を超えたら傾きを1に固定する操作

活性化関数

|
|

活性化関数の種類

活性化関数テクニック

  • バッチノーマライゼーション
    学習を早く進行させることができる。初期値に依存しない。過学習を抑制するなどのメリットがある。
    各層のアクティベーションの分布を適度な広がりを持つように調整するアルゴリズム
    全結合レイヤーと活性関数のレイヤーの間に挿入して、ミニバッチごとにデータの正規化を行う。

  • 重みの初期値について
    0,1に偏ったデータでは逆伝播で勾配の値が消えてしまう、これを勾配消失というが、この現象を防ぐ為に適度な重みを初期値として持たせる手法が用いられる。
    線形なシグモイド関数tanh関数ではXavierの初期値が、ReLU関数ではHeの初期値が用いられ、現時点ではベストプラクティスとなっている。

全結合層(Fully-Connected Layer)

|
|

全結合層の種類

  • Affine

全結合層のテクニック

出力層

|
|

出力層の種類

  • 恒等関数
  • ソフトマックス
  • Softmax-With-Loss
    損失関数も含めてソフトマックスが実装される場合

出力層のテクニック

勾配降下法(gradient)

|
|

Optimizerとして利用される
勾配降下法(gradient descent method)は損失が一番小さくなる点(鞍点:saddle point)を探すときに使用する方法

勾配降下法の種類

  • SGD(確率的勾配降下法)
    SGD(stochastic gradient descent)は最も実装が単純で基礎的な手法です。 汎用的ですが、問題によっては非効率な場合があります。
    SGDは未だに有効な手法ですが、一般に別の手法を用いたほうが効率的で、時には最終的な認識精度も上がります。

  • Momentum
    Momentumは「運動量」という意味で物理に関係があります。常に同じ方向に勾配の影響を受ける場合に、同じ方向へ一定して加速する為、SGDに比べ効率的に計算がすすめられます。

  • AdaGrad
    学習係数の減衰はパラメータ「全体」の学習係数の値を一括して下げることとなったが、ひとつひとつのパラーメーターに対して、要素毎に適応的に学習係数を調整しながら学習を行います。パラメーターの要素の中でよく動いたパラメーターの学習係数は次第に小さくなっていきます。

  • RMSprop
    AdaGradでは学習を進めれば進める程更新度合いは小さくなり、無限に学習すると更新料は0となります。過去の全ての勾配を均一に加算するのではなく、過去の勾配を徐々に忘れ、新しい勾配の情報が大きく反映されるように加算し、この問題を解決した手法がRMSpropです。
  • RMSPropGraves
  • AdaDelta
  • Adam
    勾配の方向を工夫することで、勾配降下を効率的にしたMomentumとAdaGradを融合したような手法。また、ハイパーパラメーターの「バイアス補正」が行われていることもこの関数の特徴です。

勾配降下法のテクニック

  • 学習係数の減衰
    学習が進むにつれて学習係数を小さくする手法。最初は"大きく"学習し、次第に"小さく"学習する。AdaGrad等で用いられる。

深層学習で陥りがちな問題や使われるテクニック

過学習

過学習の問題

パラメーターが多く表現力が高い場合や訓練データが少ない場合に起こります。
100パーセントの認識精度はテストデータで過学習を起こしている場合があります。
訓練データとテストデータの認識精度に誤差がある場合は過学習を起こしているといえます。

過学習に対応する方法

  • Weight Decay(荷重減衰)
    重みパラメーターが大きな値を取ることにペナルティを課すことで過学習を防ぐ仕組み。   正則化の強さハイパーパラメーターとして渡す。この値が大きいとより大きなペナルティを課すことになる。 ただし、重みの初期値を0にすると2層目の逆伝播ですべて均一な重みをもつようになってしまう為、重みの対象的な構造を崩すためランダムな初期値を持たせる必要があります。

  • Dropout
    ニューロンをランダムに消しながら学習させて対処する 。消失率はハイパーパラメーターで渡される(多分)。 機械学習でよく使われるアンサンブル学習という方法を一つのネットワークで擬似的に実現している。

勾配消失

ミニバッチ学習

全ての訓練データの中から一部のデータのみを選び出し、その一部のデータを使って学習を行う。 全てのデータに対する損失関数を計算するのは現実的では無いため、一部のデータを全体の近似として利用する。

bbb

DropOut Weight Decay

ハイパーパラメーター

ハイパーパラメーター

ハイパーパラメーターの種類

項目名 役割
各層のニューロン
隠れ層の数
バッチサイズ
学習関数
学習率 学習係数やLearning Rateとも呼ばれる0.010.001あたりの数字が使われる。勾配降下法に於いて一度の施行で変化させる量を決定する。学習係数の減衰というテクニックが使われる。
Weight Decay(荷重減衰) 重みパラメーターの値が小さくなるように学習を行うこと。重みを小さい値にすることで過学習をおきづらくする。
Dropout(消失比率)
忘却バイアス
サンプリング率 訓練データの
学習回数
重みパラメーターの初期値

ハイパーパラメーターの最適化について

訓練データ、検証データ、テストデータとあるうち、検証データをつかってハイパーパラメーターを検証することが多い。

  • ランダムなサンプリング
  • ベイズ最適化

モデル

より良いモデルは、訓練に必要なデータ量が少なく、訓練に必要な時間が少なく、訓練の精度が高い

CNN

https://qiita.com/icoxfog417/items/5fd55fad152231d706c2

(Convolution * N + (Pooling)) * M + Fully Connected * K

CNNの構成

  • 畳み込み層(Convolution Layer)
    特徴量の畳み込みを行う層
  • プーリング層(Pooling Layer)
    レイヤの縮小を行い、扱いやすくするための層
  • マックスプーリング
  • 全結合層(Fully Connected Layer)
    特徴量から、最終的な判定を行う層
  • パディング
  • ストライド

CNNのチューニングテクニック

  • フィルタを小さくし、階層を深くする
  • PoolingやFCのレイヤをなくす

CNNの派生モデル

RNN

RNNの派生モデル

  • LightRNN
  • BlackOut for RNN

RNNのテクニック

LSTM

RNNの勾配消失問題

LSTMの派生モデル

LSTMのチューニングテクニック

強化学習

強化学習(Reinforcement Learning) 状態空間と行動空間が連続か、離散かでアルゴリズムを選択する。
https://qiita.com/sugulu/items/3c7d6cbe600d455e853b https://qiita.com/namakemono/items/8353946eeec11c3dd2f1

強化学習に関するモデル

強化学習のテクニック

  • ε-greedy
    時折ランダムに行動を選択する
  • neural fitted Q
  • 体験再生
  • target network
    DQNでは,選択したactionを過大評価しないよう,experience memoryを行う(行動を評価する)際と,行動選択を選択する際で使うモデルを分けるという方策がとられています.
  • 割引率を用いた累積報酬(Discounted Future Reward) 時間がかかると得られる報酬が減っていく

強化学習のベンチマーク

  • RLglue

ネットワーク

論文

arxivで上げられた論文をサマってる。便利。 http://arxivtimes.herokuapp.com/

音声認識

音声認識のネットワーク

  • Dilated Convolution
  • Residual Networks

音声認識の評価 / テスト / データセット

動画認識

動画認識のネットワーク

  • fractionally-strided spatio-temporal convolutions
  • fractionally-strided spatial convolutions
  • PredNet
  • Deep Predictive Coding Networks
  • ConvLSTM
  • Densely Connected Convolutional Networks

画像認識

画像認識のネットワーク

  • Pixel RNN
  • Image-to-Image Translation with Conditional Adversarial Nets
  • Conditional GAN
  • PatchGAN
  • StackGAN
  • DCGAN 画像生成??

画像認識の評価 / テスト / データセット

  • CIFER-100 画像
  • ILSVRC 2016 画像認識
  • MNIST

言語認識

言語認識のネットワーク

  • Pointer Sentinel Mixture Model
  • Polnter Network
  • GNMT(Google's Neural MAchine Translation)
  • ByteNet

言語認識の評価 / テスト / データセット

ライブラリと開発環境

pyenv / virtualenv anaconda IPython Jupyter NumPy pandas SciPy matplotlib PIL(Python Image Library) scikit-learn

関数名

  • predict 認識結果を得る処理
  • gradient 重みパラメーターに対する勾配を誤差逆伝播法によって求める
  • numeric_gradient 重みパラメーターに対する勾配を数値微分によって求める
  • accuracy 認識精度を求める処理

実行環境

Google Cloud Machine Learning(GCP)

その他

  • pickle
  • nomalize
  • flatten
  • predict
  • accuracy
  • shape
  • batch処理
  • ミニバッチ
  • matplotlib.pylab
  • iter iterate 繰り返し epocs
  • layer dense dropout
  • optimizer rmsprop
  • 二次元配列
  • 2値クラス配列
  • perplexity
  • input, forgat, output gate
  • fo-pooling
  • Linear(行列積
  • Bi-directional
  • Residual Connection
  • Zero-Shot
  • Mask Convolution
  • Attention
  • SL policy network(alpha go)
  • RL policy network(alpha go)
  • value network(alpha go)
  • モンテカルロ木探索
  • 連鎖律
  • 順伝播
  • 加算レイヤ
  • 乗算レイヤ
  • アフィン変換(順伝播で行う行列の内積)
  • 誤差逆伝播