備忘録とか日常とか

学んだこととかを書きます。

Bengio先生著のDeep learning本が凄そう

ここ最近Deep learning(あるいは人工知能)関係の記事を目にしない日はない
そういっても過言ではないほど何かしらの情報が出回ってるように思う


正直言って機械学習の諸分野に興味はあるものの、
こうハイペースに畳みかけて来られるとちょっと勉強するのも億劫になってしまう。
Convolutional neural netだけに。。


今ではもうDeep learningや機械学習に関する色んな書籍やら解説スライドやらが出回っているので
勉強する環境はかなり整ったように思う、

基礎知識は知ってて当然として話を進めるものも多いように思う
線形代数や確率・統計論をはじめとするいわゆる数学的な知識だとか。

まあちゃんと一から教科書引っ張り出して勉強すればよいのだけども・・・


僕の場合、いざ線形代数とかを勉強してみても、
「で、これどう使うの?」
となることが多いです。理解力に乏しいので。。

Bengio先生ばんざい

そんな人のための画期的な本が今まさに出版されようとしてる
Bengio先生らのDeep learning

この本はDeep learningが現在のような脚光を浴びるようになった歴史から
機械学習に必要な数学的基礎知識、代表的なアルゴリズム
さらに最新の研究まで取り上げている。

ちょっとだけ読んでみたところ
基礎の数学部分では、本質的な説明がなされており
今まであやふやだった概念の理解に大いに役立った


あとこの言葉が印象に残った

Many mathematical objects can be understood better by breaking them into
constituent parts, or finding some properties of them that are universal, not causedby the way we choose to represent them.

決して専門家同士で意思疎通を図るためのものではありませんよ、ということらしい
おかげさまで機械学習における線形代数の本質が垣間見れたような気がしますよ。


現在この本は校正中らしく、もうじき出版になると思われる
ドラフト版は無料で見れる。
コピー対策のためにpdfは用意しませんて言ってるんだけど
ブラウザの印刷メニューから普通にpdf保存できるんだよな・・・いいんかな保存しても


Bengio先生といえばニューラルネットの第一人者として君臨されているお方です
そんな人の書いた本が無料で読めるんだから読まない手はない!
ただし全編英語!!

しばらくこれで機械学習と英語勉強しようと思います

複数のpdfを結合してしおりをつける(windows)

複数にわかれたpdfファイルを結合し、かつページ数が増えたpdfに対ししおりを作成する必要に迫られたので、手順をメモしておく。

pdfファイル結合

pdfの結合に関しては、今の時代便利になったもので
以下のサイトに結合したいpdfファイルをアップロードすれば自動で結合してくれる。
smallpdf.com
専用のソフトをインストールする必要がないというのは個人的にありがたい。。

しおりをつける

次にしおりを作る。
しおりというのは、クリックしたら目的のページへ飛べるリンク機能である。
大体どのビューアでも左端に表示できると思う

↓こういうやつ
f:id:may46onez:20160331233825g:plain

Adobeが公式に売り出しているのがAcrobatというpdf編集ソフトなのだが、
どうやら高価らしいのでフリーソフトを使うことにする。

今回使ったのはJPdfBookmarksというソフト。
ここからダウンロードできる
こちらもインストール不要。

手順としては
1. JPdfBookmarksからpdfファイルを開く
2. しおりを作成したいページまで移動し、左端のしおり作成ボタンを押す
3. 保存する(新規に保存することも可能)

である。
このページが画像付きでわかりやすいかも。
章立てごとにしおりを階層構造にすることもできるし、
しおりデータをテキストファイルとしてエクスポートする機能もある。


特にページ数が長いpdfだったり、タブレットに入れて読むつもりなら
読みやすさが段違いなのでしおり作成は必須ですね。

linux 新規アカウントを追加、管理者権限を付与

よく調べては忘れるのでメモする。
システム設定>ユーザーアカウントから追加することもできるが、
十分な強度のパスワードを設定しないとアカウントを有効にできない。

都合により短めのパスワードを設定しなければいけなかったので
コマンドからアカウント追加して管理者権限をつける。

ユーザー作成

「user_name」というユーザーを新規作成する。
以下のコマンドを使う。

sudo adduser user_name

これだけ。
するとUNIXパスワードを求められるので、好きなパスワードを設定する。
その後は名前とか電話番号とか聞かれるが、特に必要なければ空エンターでおけ。


useraddではホームディレクトリが生成されないので注意する。

管理者権限を与える

作ったアカウントに管理者権限を与える。

sudo usermod -G sudo user_name

これでおけ。
確認するには

su - user_name

として、@より左がuser_nameになっているかを確認する。

試しにsudo権限が必要なコマンドを打ってみる

sudo reboot

実行できたら完了。
次回からGUIでそのままログインできる。

Ubuntuアップデートしたらログインできなくなった(nvidia GPU使用)

いつものようにUbuntu14.04のアップデートが来たので、
促されるままにアップデート・再起動したらGUIでログインできなくなった話。
何とか直せたのでメモしておく。
結論から言うとnvidiaGPUのせいらしい。
かなり試行錯誤したのでもっとスマートにやる方法も多分あるけど一応。。

環境:
Ubuntu14.04
GeForce GTX970

参考元は以下
Ubuntuで認証画面を無限ループさせる方法と対処 - 拾い物のコンパス
本の虫: Ubuntu 14.04のUnityの設定をぶっ壊した場合の修復方法
Ubuntu14.04にCaffeをインストールしたらCUIでしか起動しなくなったからどうにかした話 - モノクロタイム
ubuntuにnVidiaドライバを入れたらUnityが起動しない場合の対処 - Qiita
Ubuntu 14.04 で 最新の NVIDIA ドライバーにアップデートする - ZONDEEL BLOG


症状

「あ・・・ありのまま今起こったことを話すぜ!
パスワードを入力すると、一瞬真っ暗な画面になったと思ったら
もう一度ログイン画面に戻っていた・・・
何を言っているのかわからねーと思うが
おれも何をされたのかわからなかった・・・」

と、冗談はさておき
いわゆるログインループにハマったわけである。
ログイン時の「ポコポンっ」みたいな音がトラウマになってしまった

画面の解像度が低くなっていたので
この時点でおそらくグラフィック周りの問題だろうなーとは思ったが
とりあえず色々試す羽目になった。
Ctl+Alt+F1で仮想コンソールは立ち上げることはできた。


試したこと

色々調べてみた結果、
ログインループにハマった時にまず試してみることがあるらしい。
Ctl+Alt+F1で仮想コンソールを立ち上げてログインしたあと、
homeディレクトリ直下にある以下のファイルを削除する

rm .Xauthority .ICEauthority

Xサーバの認証に使うファイルらしい。削除しても次回ログイン時に再生成される。
アップデートの時にこのへんの設定に不具合が生じる場合があるとかないとか。

ちなみに自分の場合は直りませんでした。


次、Unityの初期化をやってみる。
このサイトに従って以下のコマンドで初期化を図る。

sudo apt-get install unity-tweak-tool
unity-tweak-tool --reset-unity

unity-tweak-toolは公式のレポジトリに入っており、Unityの設定初期化とかを1行でやってくれるすごいやつらしい。
これを試してrebootするも、自分の場合ではダメでした。


めげずに次、そういえばDeep learningのライブラリであるcaffeを導入した時も
同じようなログインループに陥ったことを思い出す。その時は確かnvidia周りのファイルが原因だったような・・・

てことで以下のコマンドを叩く。

sudo apt-get purge nvidia*

で、rebootする。やっぱりログインできない。
ぶっちゃけこれで出来なかったら自分の知ってる範囲でやれることはやったので
やむなしクリーンインストールも視野に入れてた。。


nVidiaドライバのアップデートで解決

苦し紛れにやってみたら直った。
かなり苦し紛れなので正しい手順かどうかはわからん

とりあえず使っているドライバのバージョンを調べるため、以下のサイトでGPUの型番を入力する。
NVIDIAドライバダウンロード
自分の場合はGTX970だったので、バージョン361.28と出た(2016/2/25現在)

その後、以下のコマンドを打ち込む

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-cache search 'nvidia-[0-9]+$'

するとインストール可能なバージョン一覧がずらっと出てくるのだが・・・

nvidia-173 - NVIDIA legacy binary driver - version 173.14.39
nvidia-310 - Transitional package for nvidia-310
nvidia-319 - Transitional package for nvidia-319
nvidia-304 - NVIDIA legacy binary driver - version 304.131
nvidia-331 - Transitional package for nvidia-331
nvidia-340 - NVIDIA binary driver - version 340.96
nvidia-346 - Transitional package for nvidia-346
nvidia-352 - NVIDIA binary driver - version 352.63

ふむふむ。バージョン361ないやんけ!
やっていいかどうかわからないけど、仕方なく352を入れてみる。

sudo apt-get install nvidia-352

で、おそるおそるrebootするとログインできた。
解像度も元の高解像度に戻ってました
たすかった・・・これでよかったのかはわからんけど・・・


theanoが使えなくなってた

ここからは個人的な環境の話だが、deep learningに使うtheanoのライブラリで問題が発生した。
GPUを使っての演算ができなくなっていたのである。

これでは困るので再度NVIDIAドライバダウンロードのサイトでドライバをダウンロードしてくる。
再起動後、GRUBメニューでUbuntuを選択した状態で'e'キーを押し、起動オプションをいじる。
'quiet splash'と書いてあるところの直後に'text 3'を追加してF10キーを押す。

するとランレベル3でCUIログインになるはずなので、
予めドライバをダウンロードしたディレクトリに移動して以下を実行。

sudo service lightdm stop
sudo service gdm stop
sudo chmod 755 ~/Downloads/NVIDIA-Linux-x86_64-361.28.run 
sudo ./NVIDIA-Linux-x86_64-340.32.run

するとインストールが始まる。
何を省いていいかわからないので基本yesで答えたが、32bitドライバは入れなかった。

終わってから再起動し、

python
import theano

として問題なく動いたので一安心。


後日談

ひと通りやったあとにこんなサイトを見つけた。
www.rokudw.net

もしかしたらこのサイトの方法で一発だったのかもしれない。
まあ直ったのでよしとしようか。


linuxではなにかとGPU関係で問題が起こるので
そのへんもっと情弱にもわかりやすくしてほしいです(怒)


【追記16/5/1】
どうやらnvidiaのドライバダウンロードのサイトから入手できる最新版(ここでは361.--)のドライバは
ubuntu14.04LTSの最新アップデートでは動作しないようです.
CUDAのインストーラに付いてくるGPUドライバのバージョンも352になっているので
公式がgpgpuには361を使わないことを推奨しているのかもしれません.
おとなしく352を入れておきましょう.

【追記18/1/27】
二年越しの更新
日付でわかるかと思いますがかなり古い情報です。
現在もこのバグが存在するかは不明ですが、原因はnvidia公式サイトのrunfileによるドライバインストールであると思われます(たぶん)
ubuntunvidia GPUを導入する場合はubuntuの公式リポジトリからドライバをインストールすることをお勧めします。

sudo apt search nvidia

nvidia-xxxみたいなやつをインストールすればおkかと。

windows8で仮想デスクトップ環境を導入する

仮想デスクトップの便利さに今更気づいたので、windows8でも使えるようにしようと思った。
windows10では標準で仮想デスクトップ機能がついているらしいがまだアップデートする気になれない・・・
たぶん何も不具合とかないとは思うけど、慣れた環境を手放すのは割と勇気がいると思う

仮想デスクトップアプリ「Dexpot」

使うのは「Dexpot」というアプリケーション。
最大20の仮想デスクトップを構築でき、カスタマイズ性も高いことで評判になってるらしい。
ショートカットキーやらマウスジェスチャーやら壁紙やら色々自分で設定できる。
そして個人利用だと無料で使える。

とりあえず以下からダウンロードできる
2016/2/23現在でバージョン1.6が最新
http://dexpot.de/?id=download

普通にインストールできます

設定

デフォルトだと使いにくいので最低限の設定をする
タスクバーからDexpotを右クリックして「Settings」を選択する。

まずスタートアップで動いてほしいので、「general」の項目をいじる
f:id:may46onez:20160223224149p:plain

「Start」の欄の「Start with Windows」と「Hide splash screen」にチェックを入れる。
管理者で実行とかもできるのでその辺はご自由に。


次にデスクトップ切り替えのコマンドを設定する。
これは「Controls」の項目
f:id:may46onez:20160223224454p:plain
「Switch desktop」の中の「Next desktop」と「Previous desktop」を追加する(デフォルトではたぶん空になってる)
Ubuntu14.04と同じにしたかったのでCtl + Alt + 矢印キーを設定した。

あと「Move window and switch」を設定する。
これはウインドウを隣のデスクトップに移動し、デスクトップを切り替えるときに用いる。
「Move window」はウインドウを移動させるだけで、デスクトップ切り替えは行われない。

例によってUbuntuと同じにするため
「to next desktop」と「to previous desktop」をCtl + Alt + Shift + 矢印キーとした。


最後にタスクバーに仮想デスクトップの縮小版を表示する(これはまあお好きに)
「Plugins and Extras」の項目
f:id:may46onez:20160223225345p:plain
「Plugins」の中の「Taskbar pager」にチェックを入れる

作業がはかどる

各デスクトップで別々のウインドウを立ち上げておくと、いちいち他のウインドウに切り替える手間が省ける
ウインドウいっぱい立ち上げる人は使うと便利かと。