読者です 読者をやめる 読者になる 読者になる

おいしいとこはすこしだけ

文系出身SE見習いの備忘録。

Deep Learningチュートリアル講座に行ってきました

こんにちは。文系出身SE見習いの北白川キリコです。

 

今日はDeep Learningの勉強会というか、講義というか、そういうのに参加させていただいてきました。

365e5afb367e0244f53d0d3c8f.doorkeeper.jp

これね。

 

大体3部構成で、

  1. 理論編:機械学習の基礎、というかニューラルネットワークの基礎。主にパーセプトロンについて
  2. 実践編:実際にTensorFlowでニューラルネットワーク(多層パーセプトロン)を実装してみよう
  3. 発展編:Deep Learningって多層パーセプトロンと何が違うの? どんなニューラルネットワークモデルがあるの? など

みたいな感じだったと思います。

 

数学できないからやばいかなーと思ったけどΣが何だったかさえ思い出せればなんとかなりました。

 

以下、ノートから抜粋。

 

理論編:ニューラルネットワークパーセプトロン

  • 機械学習における学習とは、与えられたデータを元に望ましい出力が得られるようにモデル(法則性)を改変していくこと
  • Deep Learningにおける学習モデルがニューラルネットワークといわれるもの
  • ニューラルネットワークは人間の脳を再現しようとするもの。脳の最小単位である神経細胞を再現するモデルがパーセプトロン
  • 複数の入力から単一の出力=順伝播
  • 入力データが入ってくると、内部状態として情報が溜まる。その内部状態に活性化関数を適用して出力するという流れ
  • 入力データには重みづけがなされるので内部状態を経て出力にどの程度反映されるか変わってくる。この重みづけを色々変えていくことで正しい結果を得られるようにするのがパーセプトロンにおける学習
  • パーセプトロンの学習則とは、教師データと実際の出力データを古い重みに与えることで新しい重みに更新していくというもの
  • 更新に使う差分には学習係数をかける。この学習係数の大きさは精度にかなりかかわってくる
  • 線形分離可能な問題はパーセプトロンで解けるが、非線形だと無理
  • 非線形とかの難しい問題を解くには多層パーセプトロンが必要
  • 入力層―中間層(隠れ層)―出力層という層に分かれる。層と層は全結合
  • 多層パーセプトロンの学習には損失関数(=教師データと実際の出力データがどれくらい違うかを表す関数)を使う。損失関数の最小化問題。勾配降下法を使う
  • 出力層の勾配は計算できるので、誤差を入力層にむけて遡らせることで中間層の重みづけを決定できる
  • 全訓練データで学習すると局所解に陥ることがあるのでミニバッチに小分けにしてそれぞれで学習させる方法をとることが多い(確率的勾配降下法
  • 学習係数や重みの初期値によっても局所解に陥るかどうか変わってくる

 

実践編:とりあえずTensorFlowのチュートリアルを触ってみる

  • VirtualBoxUbuntuを入れてTensorFlowを動かしてみようみたいなやつ
  • TensorFlowではプレースホルダ―が入力層とか出力層になる
  • MNIST For ML Begginersを試してみる。中間層がないニューラルネットワークだけど91%ぐらいの正答率ですごい
  • 中間層が100、中間層の活性化関数がReLUのニューラルネットワークを作ってみたりした。初期値が大事
  • とにかくニューラルネットワークはいろんなモデルを試してみることが大事なんだけど決めるべきパラメータが多すぎ!!
  • そんなときはTensorFlowのTensorBoardを使ってみよう!パラメータのログをとって可視化してくれるよ!
  • 研究者や開発者にやさしいライブラリ、それがTensorFlow!

 

発展編:いろいろなニューラルネットワークがあるぞ

  • Deep Learningにするにはめっちゃ中間層を増やしまくればいいのでは? と思ってしまうが事はそう簡単ではない
  • まず過学習の問題があるがこれはデータ量の充実とかドロップアウトとかである程度回避できる
  • 中間層が多すぎると誤差がちゃんと次の層(逆伝播なので正しくは前の層)に伝わらずわやくちゃになる問題(=勾配消失問題)は2006年まで未解決
  • しかしHinton教授が事前学習(pretraining)で解決できると発見!
  • Hinton教授は偉い人なので覚えて帰ること
  • pretrainingとは、重みづけの学習前の初期値を適切に設定すること。これがランダムなので勾配消失問題が起こっていた
  • pretrainingの手法のうち、Autoencoder(AE/自己符号化器)は入力データだけで教師なし学習を行う。入力に対する出力結果が入力データ自身となるように重みづけをする
  • 深い構造で学習させたいときは、一層ずつautoencoderで学習して重みづけの初期値を決定し、層を重ねていく(Stacked Autoencoder/積層自己符号化器)
  • AutoEncoderの重みを可視化すると特徴量らしきものを獲得できる! これがすごい!
  • Sparse Encoderという言葉が出てきた。できるだけ重みは0にするようにという制約のようなもの
  • 2012年ごろ、一般物体認識でDeep Learningが圧倒的な正答率を叩き出し(80%超え。今は90%超えで人間以上)、それ以降Deep Learning研究は大盛り上がり
  • 用途に応じて色々なニューラルネットワークがあるが、今一番有名なのはCNN(Convolutional Neural Network/畳み込みニューラルネットワーク
  • CNNの話はよくわからなかった…畳み込み層とプーリング層っていうのを繰り返したあとに普通のニューラルネットワークと同じ全結合した層につなげるらしい。pretraining要らない
  • 毎日論文が出てるので海外の論文をいっぱい読もう
  • ハイパーパラメータ問題(パラメータ多すぎ複雑すぎ問題)はなかなか解決されてないぞ
  • とりあえず青本を読もう

 

講師の方々が順序立てて話してくださったので、すごく分かりやすかったです。

まあこのメモは分かりにくいですけど……まずは覚え書きとして。

最近仕事が楽しいのでブログを再開します

文系出身SE見習い半年目になりました。キリコです。

別にそれまでが楽しくなかったわけではないんですが、誰かに話したい~! という気持ちがムラムラと湧き上がってくるくらいに面白くなってきたので久々に記事にしようと思います。

 

自然言語処理を齧り始めた

何にも知らなかったんだけど何にも知らないなりに必要に駆られて触ってたらめっちゃ面白いんですね自然言語処理

仕事ではそこまでがっつり色んなことやらせてもらえるわけではないんですが、基本的な環境の揃え方とかは分かったので家で導入してみて遊んでます。

 

word2vecめっちゃおもろい

qiita.com

こんなことできんの!? ってめっちゃびびりました。

いやなんか、twitterのニュースとか見てると人工知能が小説を書いたとか言ってて、へーすごいなーとは思ってたんですけど、その前段階的なものというか、こういう風に言語って解釈されていくんだーっていう感動がありました。

言語学とか全然興味なかったけどめっちゃ気になってきた。

 

上の記事はFaceBookからコーパス(テキストデータ資料)取ってるから一般的な言葉がまんべんなく入ってるんだと思うけど、偏ったコーパス飲ませてどの単語に類似度が高く出るかを試してみたらめっちゃ面白いやろうなと思っている。

なろう小説とか全部飲ませたらどうなるんだろう。

 

ところでコサイン類似度とかは最初全然意味がわかんなかったんで高校の教科書引っ張りだしてきました。

高校でやったベクトルの計算なんか精々3次元が関の山だったけど、200次元とかでも同じように計算できるんですね。全然イメージはできないんですが……

 

ところで機械学習

機械学習の勉強はここでやってたけど完全に三日坊主してます。

www.coursera.org

全然駄目ですね。

 

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)

 

 自然言語処理やるならこれ読んでもいいのかもしれない。

 

あと会社で新人教育とかしている

入社半年なのに新人教育をしています。

「っかー、半年目なのに教育役を仰せつかっちゃったわ―、っかー」みたいな話ではなく、年の近い先輩がサポート役に入るみたいなやつですね。

上手いアドバイスができるとすごく質問してくれるようになるんですが、的外れなことを言ってしまうと途端に頼りにされなくなるみたいな毀誉褒貶がありますね。かなりシビアな目で評価されているのだろうなという緊張感があります。

頑張っていきたいですね……

 

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

 

この本勧めてるのにあんまり読んでもらえなくて悲しい。

 

読んで面白かった本

本の話になったので最近読んで面白かった本ですが。

 

王とサーカス

王とサーカス

 

最高に面白かったです。もう本当にめっちゃ最高だった。感動しました。

堅い本は全然読めてないですね……体力がない。むむむ。

 

壁を登りはじめました

あとそういえば最近ボルダリングを始めました。

ロープとかを使わないで身体だけでやるクライミングですね。崖というよりは壁を登ります。

手足ガタガタになりますが、登れたときは達成感があって楽しいです。

Tシャツにジーンズ姿でジムに行ったらすぐ楽しめるのも気楽でいいですね。(チョークまみれになるので基本的に着替えはあったほうがいいですが…)

 

久々の割にあんまり中身の無い記事になりましたがこんな感じで楽しくやってます。

本を読んでないので感想もない

 

真実の10メートル手前

真実の10メートル手前

 

でもこれは読みました。『さよなら妖精』の登場人物だった大刀洗万智(センドー)さんが主人公です。

もうめちゃくちゃ面白かった。米沢先生の本は本当に良い。大刀洗さんが突然観光案内を始めて怪訝な顔をされるシーンが切なかったなあ。

というかもしかして『王とサーカス』も大刀洗さんの話なのかしらん。

 

さよなら妖精 (創元推理文庫)

さよなら妖精 (創元推理文庫)

 

 

お給料日前なのでいっぱい本を買うわけにいかなくなってるんですけど、振り込まれたらいっぱい買いたい本がある。でも『貨幣と精神』を途中で積んでるんだよなー。早く読もう。

読んだ本と感想まとめ(2/2~2/8)

もっと読もうと思いつつついついスプラトゥーンやっちゃうなあ。

 

哲学・倫理学関係

貨幣と精神
貨幣と精神―生成する構造の謎

貨幣と精神―生成する構造の謎

 

哲・倫に分類して良いのかは微妙だけど、まあ哲学要素はあるでしょってことで。

ラカンが全然分かんないから教えてください、とお願いして紹介してもらった本。

 

三部構成で、第一部で「貨幣」として貨幣論の概観、第二部で「精神」としてラカンの紹介、第三部「貨幣と精神」としてラカンから社会システムを読み解く、みたいな構成かな。

まだ貨幣論のところまでしか読めてないんだけど、筆致がどことなく軽妙ですらすら読めるし、非常に明快で分かりやすい。

 

秩序問題について。傾性論と懐疑論は互いに対をなしながらも、過去と未来(帰結)のいずれかのみを所与のものとして認めることで、その間にあるギャップという疑問そのものをなきものにしている、みたいなところがめっちゃ面白かった。

 

機械論のところでも時間概念についての話は出てきて、機械論的な「予算制約下の効用最大化」を論じる際には全ての商品を比較検討したうえで何を買うかが決定されることになっているが、実際には何かを買おうという段階で既に何を目的としてモノを買うかが期待・予期されている。

でも機械論的にはそんな所与の未来、現在の目的としての未来というものはなくて、先に起こることは現在の時点でアルゴリズムによって既に決まっているものにすぎない。機械論には時間というものが存在しないのだ。みたいな。

 

知ってる人にはおさらいなのかもなあと思ったけど、不真面目文系人としてはこの明快さはありがたい。端折っているのか独断的な部分があるのか、ところどころ「そこは断言しちゃっていいのか?」みたいなところはあるけど……アプリオリっていうのかなこういうの……

次はいよいよラカンの節なので楽しみ。

 

性的唯幻論序説
性的唯幻論序説 (文春新書)

性的唯幻論序説 (文春新書)

 

いよいよもって哲・倫関係ないな……

岸田秀先生といえば、専門外のことについてコメントされていたのについて卒論で揚げ足を取りまくったような記憶があるようなないような。きっと気のせいですね。

 

フロイト解釈としてはすごく分かりやすいし、あの意味不明な喩え話の羅列(に見えるよね?)をどういう風に自分の中に落とし込んでいくか、という助けになる感じ。

およそ性欲というものに関連する事柄についてかなり幅広く取り上げているので、そういう意味でもすごく興味深いと思う。なかなか忌避感が出やすいジャンルだし。

 

ただ、「男性の/女性の性欲とは一般にこういうものだ」というようなことについてあまりにも独断的に語りすぎている感じがあって、学術的論及としてはあんまり良くないんじゃないかなあ……

フロイトに造詣の深い人による性欲についてのエッセー、ぐらいで読むのがいいような気がする。

 

小説

翳りゆく夏
翳りゆく夏

翳りゆく夏

 

めっちゃ面白かった!

ある女子大生が大手新聞社の内定を獲得するんだけど、その女子大生が昔起こった乳児誘拐殺人事件の犯人の娘だってことを週刊誌にすっぱ抜かれて、内定辞退したいと言い出す。新聞社側がなんとしても内定辞退させたくなくて、その誘拐殺人事件について再び洗い出す、というような筋書き。事件に関係した人々の視点が交錯する形でストーリーが進んでいく。

ドラマにもなってるのね。評判次第だけどぜひ見たい。

 

和菓子のアン
和菓子のアン (光文社文庫)

和菓子のアン (光文社文庫)

 

日常の謎系連作短編集ってやつかな。ほっこりする。あと和菓子が美味しそう。

面白かったんだけど、「男のくせに女の子チックなものが好きなんて変」みたいな書き方が随所に(それも笑いどころとして)出てくるのはちょっと、うーん、ってなってしまった。昔よりこういうのを素直に面白がれなくなってるのは悪いことではないと思うんだけど。

自作ソフト「タスクタイマー」がVectorに置かれたみたいです

先日作ったフリーソフト「タスクタイマー」をVectorに置いていただけることになりました。

www.vector.co.jp

 

ソフト説明はこちら。

kitashirakawakiriko.hatenablog.com

これといってバグも見つからなかったのでβ版と同じ内容です。

よかったら使ってみてください。

読んだ本と感想まとめ(1/25~2/1)

文系出身SE見習いの北白川キリコです。

このおざなりな自己紹介をそろそろなんとかしたい。

 

前回から1週間+1日空いてしまいましたが、最近読んだ本など。

 

哲学・倫理学関係

ビッグクエスチョンズ 倫理
ビッグクエスチョンズ 倫理 (THE BIG QUESTIONS)

ビッグクエスチョンズ 倫理 (THE BIG QUESTIONS)

 

前から気になってたけどなんか買えてなかったのですが、ようやく購入。

身近な問題と繋げながら倫理学上のいくつかの問題を俯瞰していくというような趣旨で、読みやすいし面白かった。

しかし、概論的な部分と著者の意見がシームレスで、主語がはっきりしないために急に一般論的に断じられているような気持ちになるのはちょっとマイナスかな。これはもしかしたら訳の問題なのかもしれないけど……

セックスは道徳的なことか?の辺りとか、やっぱり古典的な道徳観が見え隠れしている感じがあるのは残念。

でもオススメです。この手の本としてはお値段も質量も比較的お手軽な感じ。法と道徳の関係や科学と道徳の関係にも触れてるのはすごくよかった。

 

プログラミング関係

プログラミングのための線形代数
プログラミングのための線形代数

プログラミングのための線形代数

 

もともと『ITエンジニアのための機械学習入門』を読もうとしてさっっっっっっっっっっっっっっぱり分かんなかったのでこれを買いました。

読んだ本というかまだ始めの方までしか読んでないんだけど、あ~ベクトルってやってたな~ああ~行列の説明してた先生いたな~みたいな思い出に浸っている。

行列は写像らしい。図をいっぱい使ってくれてるから今のところなんとなく分かってる感じ。しかし早晩分からなくなりそうな気もする……

 

ってこれだけなので実質1冊しか読んでないですね。まあ1週間だとそんなもんかなあ。

線形代数は1週間で読破できる気がしないし急いで読破するものでもなさそうなので、また新しく1冊調達してこよう。

自作ソフト「タスクタイマー(仮)」のβ版を公開します

文系出身SE見習いの北白川キリコです。

 

Windowsフリーソフトを作りました

ちょっと前からちょこちょこ作っていたWindows用自作ソフトのβ版を公開します。

もうちょっとチューンナップして、申請が通ったらVectorに置きたい。

 

アップロード先はこちら。

Axfc UpLoader -3608157.zip-

DLパスワードは「kiriko」です。

テストはしてありますが、未知のバグが存在する可能性があります。自己責任のもとで試してください。このソフトを使用したことにより発生したいかなる問題・損害にも、当方は一切の責任を負いません。

 

どんなソフトなの

このソフトはWindows上で動作するカウントダウン式タイマーです。
複数のタスクとその予定時間を設定し、タイマーをスタートさせることで、残り時間と現在の進捗、及び終了予定時刻を確認することができます。
予定時刻になると、ポップアップウィンドウまたはアラーム音で通知されます。

勉強やプレゼンテーションの時間配分を想定して作成されています。

(readme.txtより抜粋)

 

 簡単に使い方を説明すると、

f:id:kitashirakawakiriko:20160126204912j:plain

まずこういう画面で、これからやるべきタスクとその予定時間を入力します。

入力して右下のタイマースタートボタンを押すと、

f:id:kitashirakawakiriko:20160126205014j:plain

こういう画面が出てきてカウントダウンが始まります。

カウントが0になると、

f:id:kitashirakawakiriko:20160126205059j:plain

こういう感じ(画像中央)でポップアップが出てきたり、「ポーン」って音が鳴ったりして教えてくれます。

おわり。

 

開発環境はVisual C#

.NET FrameworkなんでWindowsでしか動きません。Vista以降なら問題なく動くと思うけどそれ以前のだと分からないです。

もう一回言っておきますが、一応テストはしてあると言えども未知のバグが存在する可能性があります。自己責任のもとで試してください。このソフトを使用したことにより発生したいかなる問題・損害にも、当方は一切の責任を負いません。

 

ちょっとした自分なりの工夫(あるいは悪あがき)

リストビュー上の順番入れ替えの実装。

private void
ReverseListViewItems(
    ReverseTo inReverseTo)  // 上と入れ替えるか下と入れ替えるか
{
    // リストビュー上で選択されたアイテムをコピー
    ListViewItem selectedCopy = TaskListView.SelectedItems[0];
    // 選択されたアイテムのインデックスを保持
    int selectedIndex
        = TaskListView.Items.IndexOf(TaskListView.SelectedItems[0]);

    // 保持したインデックスをもとに選択されたアイテムを削除
    // (TaskListView.Items.Remove(SelectedItems[0])だと、
    // 同じ内容のアイテムがあった場合そっちが削除されてしまう…はず)
    TaskListView.Items.RemoveAt(selectedIndex);

    if (inReverseTo == ReverseTo.Up) {    // 上のと入れ替え
        TaskListView.Items.Insert(selectedIndex - 1, selectedCopy);
    }
    else {                                // 下のと入れ替え
        TaskListView.Items.Insert(selectedIndex + 1, selectedCopy);
    }
}

private enum ReverseTo  // 入れ替える方向を示す列挙体
{
    Up = 0, // 上の項目と入れ替える場合
    Down    // 下の項目と入れ替える場合
};

不器用ながらこんな感じで。 

 

あとは、タスクの合計時間はリストビュー追加時点でint型(秒)に変換して、ListViewItemにTagとして持たせておいて、タイマー画面に渡すときにそのまま使えるようにしたりとか。

でもこれは良いのか悪いのかわかんないですね…タイマー画面からは設定画面へ戻るのは限りなく面倒になっちゃったし。

 

作るときお世話になったTips記事

色々参考にさせていただきましたが、特に助かった記事をご紹介させていただきます。

 

まずこちら。

sairoutine.hatenablog.com

タスクリスト情報を設定画面からタイマー画面へ受け渡す部分。

これすごく好き。

 

それからこちら。

ざっちのーと 【C#】メッセージボックスを最前面表示させる方法

タイトル通り。タイマー画面が最前面になくても通知ポップアップが最前面に来るようにできました。

 

あとこれ。

TextBoxに数字しか入力できないようにする: .NET Tips: C#, VB.NET

DOBON.NET様には他にも色々お世話になりました。

これからもめっちゃお世話になると思います。

 

一応β版なので

使用された方で、バグや、「こうすればもっと使いやすいかも」などのご意見があればどしどしお願いします。

宛先はこのブログのコメント欄でも、メールアドレス(kitashirakawakiriko★gmail.com/★→@)でも、ツイッター(@uril_ms)でも。

全てのご意見を反映できるとは限りませんが、頑張って対応してみたいです。