Screaming Loud

日々是精進

anyenvでphpenvとかpyenvとかenv系をまとめて管理する

実行環境

phpenvが入らない

phpのバージョンを管理するphpenvを入れようと

brew install phpenv
brew install php-build

をしたところ、phpenvが動かなかった*1ために、anyenvを入れることにしました。

anyenvはphpだけではなく、ruby, python, perl, nodeなどenv系をまとめていれることができます。

ほぼ、欲張り?anyenvでモダンな開発環境構築。PHP,NodeJS,Ruby,Perl,Python - Qiitaを参考にして、いれました。

anyenvの導入

まず、
自分のローカルに入っているenv系を削除します。

brew remove phpenv
brew remove rbenv

env系が削除できたら、

git clone https://github.com/riywo/anyenv ~/.anyenv

次に、パスを追加します。
今まで入れていたenv系はコメントアウトして、 ~/.zshenv に以下を書き加えました。

if [ -d $HOME/.anyenv ] ; then
    export PATH="$HOME/.anyenv/bin:$PATH"
    eval "$(anyenv init -)"
    # tmux対応
    for D in `\ls $HOME/.anyenv/envs`
    do
        export PATH="$HOME/.anyenv/envs/$D/shims:$PATH"
    done
fi

その後は、再読み込みです。

source ~/.zshenv

ここでanyenvを使い、インストールします。

$ anyenv install plenv
$ anyenv install pyenv
$ anyenv install rbenv
$ anyenv install phpenv

ただこのままだと、自分の環境では以下の様に、plenvとpyenvが入りませんでした。

phpenv:
* system (set by /Users/yuto/.anyenv/envs/phpenv/version)
plenv:
/Users/yuto/.anyenv/libexec/anyenv-versions: line 12: plenv: command not found

pyenv:
/Users/yuto/.anyenv/libexec/anyenv-versions: line 12: pyenv: command not found

rbenv:
* system (set by /Users/yuto/.anyenv/envs/rbenv/version)

そこで、以下のanyenvのプラグインを入れることで解決しました。

$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
$ anyenv update
$ git clone git://github.com/aereal/anyenv-exec.git $(anyenv root)/plugins/anyenv-exe
$ git clone https://github.com/znz/anyenv-git.git $(anyenv root)/plugins/anyenv-git
$ anyenv git gc
$ anyenv versions
phpenv:
* system (set by /Users/yuto/.anyenv/envs/phpenv/version)
plenv:
* system (set by /Users/yuto/.anyenv/envs/plenv/version)
pyenv:
* system (set by /Users/yuto/.anyenv/envs/pyenv/version)
rbenv:
* system (set by /Users/yuto/.anyenv/envs/rbenv/version)

ここからは、インストールするだけです。

$phpenv install 5.6.9
phpenv versions
* system (set by /Users/yuto/.anyenv/envs/phpenv/version)
  5.6.9
$ phpenv global 5.6.9
$ phpenv versions
  system
* 5.6.9 (set by /Users/yuto/.anyenv/envs/phpenv/version)

このままだと、

$ php -v
PHP 5.5.27 (cli) (built: Jul 23 2015 00:21:59) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

なので、以下操作で反映されました。
多分、どこかでzshenvの再読み込みを忘れていたようです。

$ source .zshenv
$ php -v
PHP 5.6.9 (cli) (built: Sep 28 2015 23:38:48) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies
    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

*1:具体的には、./phpenv以下にbinファイルが作られなかった

深層学習本の再帰型ネットワークの誤字

深層学習本を読んでいて間違いを見つけたのですが、問い合わせ先がわからないので、ここで共有したいと思います。

Chapter7の再帰ニューラルネットの7.6.2の「コネクショニスト時系列分類法」で

{ \displaystyle
L' = \{a,b,c,\sqcup\}
}
に対する真のラベル
{ \displaystyle
l = cbab
}の冗長表現を表すときに、
{ \displaystyle
c\sqcup b\sqcup\sqcup aab
}と記載していますが、
空白以外が追加されると、それは冗長表現ではなく、別の文字列になってしまいます。
ですので正確には、
{ \displaystyle
c\sqcup b\sqcup\sqcup a\sqcup b
}などが正しいです。

もし認識が間違っていたら指摘をお願いします。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

ニューラルネットワークについてまとめてみた。

ニューラルネットワークについてあんまり勉強してなかったので、勉強がてらまとめてみました。

順伝搬型ネットワーク

解くべき問題として、以下3つがあげられます。

  • 回帰
  • 2値分類
  • 多クラス分類

画像認識などは、1カテゴリ1クラスとして画像を多クラス分類する。

学習方法

どうやって学習するか?
誤差関数の出力を最小にする。
誤差関数:正解データとネットワークの出力の差

勾配降下法と確率的勾配降下法

誤差関数を微分して、傾きが0となる最小値を求める

  • 勾配降下法
    訓練データ全てで計算する
  • 確率的勾配降下法
    サンプルをとって、1クラスだけ重みを更新する

注意点

ニューラルネットワーク過学習しやすいから気をつけましょう。

局所解に陥ってしまう。 対処法→正則化する、ドロップアウト(良い)

ドロップアウト:中間層と入力層を確率pでランダムに選出して、その選出したもので学習する

学習係数

学習係数は一番重要。 層ごとにわけて、入力に近いところの学習係数を大きくする。 学習ごとに値を小さくしていく。

重みの初期値

重みの初期値はガウス分布に従うようにすると大体うまく行くことが多い。

バックプロパゲーション

関数の入れ子になったものを出力と比較して計算するのは大変。

y=W(W(Wx +b) +b)x + bと出力xの誤差を計算するのは大変。

出力層の重みから一つずつ計算していく。

誤差関数の微分はバイアス項があって面倒。 そのバイアス項をl-1層の入力1として考えると、掛け算のみになる。

出力層の微分は簡単

学習のアルゴリズム

  1. 重みから計算していき、まず出力の値を求める。
  2. 出力と正解データから重みを学習する。
  3. 上の操作を繰り返し、誤差関数を最小化させる。

以下参考にしてまとめてみました。

相当はっしょってるので、どちらかというと自分用のメモかもしれません。。。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

単層パーセプトロンをScalaで実装

久しぶりに実装してみました。
多分実装できていると思います。。

実装に関してはPythonと同じ位簡単なんですが、
Scalaでやる場合は、データセットの読み込みとかランダムデータを作るのが結構めんどいんで、どうするのがいいのかってところが困りますね。

以下がソースコードです。github.com

昔書いたPythonのコードyuutookun.hatenablog.com