はい!今やってます!

Work Pertly, Live Idly

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

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

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

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

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

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

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

ソフトマックスについて

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


\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

基礎

パーセプトロン ディープラーニング 活性化関数 ReLU ステップ関数 シグモイド関数 バックプロパゲーション LSTM 出力層 恒等関数 ソフトマックス

損失関数はそのニューラルネットワークがどの程度の性能かを表すための関数です。基本的な関数は二乗和誤差などが挙げられます。 求める解に対して差が大きければ大きいほど性能が悪いと言えます。

勾配降下法をミニバッチで処理するから、確率的勾配降下法となる。

過学習 パラメーターが多く、表現力が高い場合、訓練データが少ない場合に起こる 100パーセントの認識精度はテストデータで過学習を起こしている場合がある。 Weight Decay(荷重減衰) Dropoutでニューロンをランダムに消しながら学習させて対処する

ハイパーパラメータ
各層のニューロンサイズ バッチサイズ、学習関数、Weight Decay

訓練データ、検証データ、テストデータとあるうち、検証データをつかってハイパーパラメーターを検証することが多い。 ハイパーパラメーターの最適化についてはランダムなサンプリングの他、ベイズ最適化などの方法があげられます。

ライブラリと開発環境

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

用語

  • pickle
  • nomalize
  • flatten
  • softmax
  • predict
  • accuracy
  • shape
  • batch処理
  • miniバッチ
  • loss 損失関数関数
  • 二乗和誤差 mean squared error
  • 交差エントロピー誤差 cross entoropy error
  • ミニバッチ
  • matplotlib.pylab
  • gradient 勾配
  • gradient descent method
  • learning rate 学習率 lr (ハイパーパラメーター)
  • hidden 隠れ層
  • 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)
  • モンテカルロ木探索
  • 畳み込み層
  • 全結合層
  • ソフトマックス
  • 損失関数
  • 誤差逆伝播

モデル / ネット

より良いモデルは、訓練に必要なデータ量が少なく、訓練に必要な時間が少なく、訓練の精度が高い - Residual Networks(ResNet) - identity skip connection path - ResNeXt - 自己回帰モデル - LightRNN - BlackOut for RNN - QUASI-RECURRENT NEURAL NETWORKS

  • Fractal Net
  • Deep Networks with Stochastic Depth
  • Residual Networks of Residual Networks(RoR)
  • Dilated Convolution Network

  • GNMT(Google’s Neural MAchine Translation)

  • Neural Architecture Search with Reinforcement Learning モデルもRNNで作ろう

  • DNC(Differentiable Neural Computers) 汎用型

論文

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

言語

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

評価 / テスト

コーパス TIMIT 音声認識 MNIST CIFER-100 画像 ILSVRC 2016 画像認識 DCGAN 画像生成?? Penn Treebank dataset(PTB) BLUE 翻訳?

実行環境

Google Cloud Machine Learning(GCP)

メールアドレスのドメイン部分を一括で置換するSQL

メールアドレスのドメイン部分を一括で置換する

UPDATE
  `test_user`
SET
  `email` = CONCAT(
      LEFT(
          `email`,
          INSTR(`email`, '@')
      ),
      'test.com'
  )
WHERE
  `email` NOT LIKE '%@test.com';

メールアドレスのドメイン毎に件数を集計する

select SUBSTRING(email,LOCATE('@',email)) as domain , count(*) as count from user group by domain;

活性化関数、ReLUについて

活性化関数ReLU関数について

活性化関数、伝達関数と呼ばれる関数、中でも現代のニューラルネットワークでは最も一般的に利用されるReLUについて、 わかりやすく説明したい。

パーセプトロンニューラルネットワークの違い

一般的に言われる「単純パーセプトロン」は、単層のネットワークで、活性化関数にステップ関数(閾値を境に出力が切り替わる関数)を利用したモデルです。 一方で、多層でシグモイド関数などの滑らかな活性化関数を使用するネットワークを「多層パーセプトロン」と呼び、これがニューラルネットワークとなります。

パーセプトロンについて

パーセプトロンの誕生については1957年まで遡ります。視覚と脳の機能をモデル化し学習能力を持つものを言います。1960年代に爆発的なニューラルネットワークブームを巻き起こすも、1969年に線形分離可能なものしか学習できない事が指摘され下火となりました。

いくつかある活性化関数

ステップ関数

前述の通り、閾値を境に出力が変わる関数

シグモイド関数

こちらもニューラルネットワークでよく用いられる活性化関数のひとつ


\displaystyle h(X) = \frac{1}{1+exp(-x)}

exp(-x)は
\displaystyle {e}^{-x}
を意味する

シグモイド関数とステップ関数の違いは滑らかさであり、入力に対して、連続的に出力が変化するのが特徴です。 つまりステップ関数が0か1のどちらかの値しか返さないのに対して、シグモイド関数は実数を返す。0.***という感じで。 ただし、ステップ関数もシグモイド関数もいずれも、どんな値も0~1の間に押し込める点、非線形な関数であるという点は共通しています。

ReLU(ランプ)関数について

ReLU関数は非常にシンプルで、入力が0を超えていれば入力をそのまま出力し、0未満であれば0を返します。 現代のニューラルネットワークにおいては、一般的にReLU関数が活性化関数として使われています。

DockerのCentOSイメージを取得して、Railsアプリを動かすまで

新しいものを作りたくなったので、Docker上で動くRailsのプロジェクトを作成。 ハマり所としては、MariaDBを使いたかったのだが、mysql2がサポートしていなかった為使えなかった。

最新版のcentOSイメージを取得する(7.3)

docker pull centos:latest

dockerコンテナ起動

docker run --privileged -d -i -t --name=rails -v $HOME/work/workspace:/var/www -p 8080:80 centos:latest /sbin/init

mysqlをインストール(5.7)

yum remove mariadb-libs
rm -rf /var/lib/mysql/
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum -y install mysql-community-server mysql-devel

rubyをインストール(2.4.0)

yum remove ruby
yum install -y git
yum install -y libxslt-devel libxml++-devel libxml2-devel

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
cd ~/.rbenv/plugins/ruby-build
./install.sh
rbenv -v
rbenv install -l
yum install -y bzip2 gcc openssl-devel readline-devel make
rbenv install 2.4.0
rbenv rehash
rbenv global 2.4.0
ruby -v

railsをインストール(5.1.1)

yum -y install gem
gem install rails

プロジェクト作成

rails new new_project -J -T -d mysql

その他

以下のようなものを参考にDocker Fileを作ってみてもいいかも http://qiita.com/togana/items/30b22fc39fe6f7a188ec

系にyumでMariaDBをインストールする

MariaDBのRepository Generatorへアクセス

https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university

yumリポジトリを追加

vi /etc/yum.repos.d/MariaDB.repo

設定ファイルを記述

# MariaDB 10.2 CentOS repository list - created 2017-06-02 14:39 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

yumMariaDB-server, MariaDB-clientをインストー

sudo yum install MariaDB-server MariaDB-client