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

俵言

しがない社会人が書く、勉強とかゆるふわプロコンのこと

【jupyterで学ぶ】 ゼロから作るDeep Learning - 第5回:4章(その1)損失関数

はじめに

次の記事を書こう書こうと思いつつ、気付いたら2週間経ってました。何てこったい..書く気を取り戻したので再開します。

この「ゼロから作るDeep Learning」の勉強内容をひたすら書いていく記事も、遂に本題である学習の話に入っていきます。
3章まではニューラルネットワークの構造など導入的な意味合いが強かったと思うのですが、ここからはいかに自動で最適な重みを学習するのか、というニューラルネットワークの核となる部分です。僕の一番勉強したかったところなので気合入れて勉強して行こうと思います!

4章 ニューラルネットワークの学習

4章の導入では、SVMやKNNといった機械学習の手法は人が特徴量(データの注目すべき点)を作りこむ必要がある(すなわち人が介在しなければならない)けれど、ニューラルネットワークディープラーニング)は生データをそのまま学習させることができると書かれています。

個人的には「そうなの?」って思ったんですけど、よくよく考えるとこの本は画像認識を念頭に置いて書かれているので間違っていない気がします。「この画像に写ってるのは何か?」って話だと確かにそうなのかなって。(画像認識やったことないのでわかんないですが。)
ただ、言語処理をやるだとか、多種多様なデータを複合して何かやろうだとかなると、人の手がかなり介在する気がします。まあこれからの進展でなんでも出来るようになるかもしれませんけども。

4章も3章と同様に3つに分けて勉強していこうと思います。

今回は その1である損失関数のお話です。

続きを読む

gensim の tfidf で正規化(normalize)に苦しんだ話

最近先輩に勧められて python の gensim というライブラリを使い始めたのですが、試しに tfidf やってみたらどうやって正規化してるのかわからなかったから調べたって話です。

かなり細かいことなのですが、同じことに苦しむ人がもしかしたらいるかもってことで記事にすることにしました。

gensim とは?

radimrehurek.com

gensim は python で提供されている自然言語処理のライブラリで、tfidf や、LSI や LDA みたいなトピックモデル、はたまた word2vec なんかも手軽に計算できる便利なツールです。これ2008年からあるらしいんですけど知らなかった...これの存在知ってたら僕の卒論の実装もっと楽になった気がする(--;)

まあ過去の話はさておき、このライブラリを試してみるべくまずはtfidfの計算をしようとしたわけです。

続きを読む

【jupyterで学ぶ】 ゼロから作るDeep Learning - 第4回:3章(その3)ニューラルネットワークを試してみる

はじめに

今回も引き続き3章です。今回は その3:試してみる編 です。

この前作ったニューラルネットワークを試すだけなのでさらっと終わると思います。

その3) 実装したニューラルネットワークを試してみる

今回は前回作ったNNを用いて手書き数字(0~9)の認識を試みます。用いるデータセットMNISTというモノクロ画像のデータセットで、とても有名なやつらしいです。一枚の画像は 28 × 28 のピクセルで表現されていて、各ピクセルは 0~255 の値をとります。これらの数字を認識させて、正解ラベルとどれくらい一致するか試してみます。

なお、データを取得する手段やNNのパラメータ(重みとバイアス)は著者の方が用意してくれているため、本当に何もする必要がありません。

続きを読む

【jupyterで学ぶ】 ゼロから作るDeep Learning - 第3回:3章(その2) pythonによるニューラルネットワークの実装

はじめに

前回に引き続き3章を勉強していきます。3章の流れは以下の通りですが、今回は その2である実装です。

先に言っておくと、今回はもっぱらpythonにおける行列計算のお話になります。最初の方は読まなくていい人がたくさん居そうですが、復習がてらやっていきましょう。

その2) ニューラルネットワークを実際に実装する

ニューラルネットワーク(以下NN)では入力の(重み付き)線形和に対して(その1)で学んだ活性化関数をかけて出力とします。で、この線形和を効率的に計算する上で行列の計算は欠かせません。

今回はまずこの行列演算の話をしてから、NNの実装、加えて最終的な出力をどうするかの話をつらつらと書いていきます。

続きを読む