読書会(Deep Learning Javaプログラミング 深層学習の理論と実装)第2回議事録

[ 戻る ]


=====================================================================================
Java読書会BOF 「Deep Learning Javaプログラミング 深層学習の理論と実装」を読む会 第2回
=====================================================================================

.. csv-table:: 開催概要

   "日時","2017年1月21日 10:00 - 17:00"
   "場所","川崎市教育文化会館 第3会議室"
   "出席者(敬称略)","高橋(徹)、高橋(智)、吉本、根本、平山、キョウ、青山、伊藤、今井、石黒、岩室(書記)"

Chapter 2 機械学習アルゴリズムを学ぶ - ディープラーニングへの準備
================================================================================

2.5 ニューラルネットワークの理論とアルゴリズム
------------------------------------------------------------

2.5.3 多クラスロジスティック回帰
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- exp(x) = e^x
    - 右辺だと長いのでこう書いた?
    - 「`指数関数(Wikipedia) <https://ja.wikipedia.org/wiki/指数関数>`_」 によると、指数関数は指数法則(exp(x+y)=exp(x)・exp(y))を満たすから、指数関数を冪乗の記法を以って e^x と書くこともある、とのこと。
        - 「指数関数」は狭義には「自然指数関数」を指す。

- 「`シグモイド関数(Wikipedia)  <https://ja.wikipedia.org/wiki/シグモイド関数>`_」: 『導関数をシグモイド関数自身で簡単に導出できるため、微分成分が必要となるプロパゲーションに適している』という性質によってニューラルネットワークの「活性化関数」とし
て用いられているということ?
    - 「`活性化関数(Wikipedia) <https://ja.wikipedia.org/wiki/活性化関数>`_」: 『ニューラルネットワークにおいて、線形変換をした後に適用する非線形関数もしくは恒等関数』のこと。

- 「`ソフトマックス関数(高校数学の美しい物語) <http://mathtrain.jp/softmax>`_」
    - 「シグモイド関数の多変量版である」 ⇒ n = 2 のとき、この関数からシグモイド関数が導出される。
    - 『(ベクトル) x の各成分の中で x_i がダントツで大きい → y_i はほぼ 1 で (ベクトル) y の他の成分はほぼ 0』という性質を持つ。(リンク先の解説より)

- p.49 「`事後確率(Wikipedia) <https://ja.wikipedia.org/wiki/事後確率>`_」
    - 条件付き確率の一種。
        - 「`条件付き確率(Wikipedia) <https://ja.wikipedia.org/wiki/条件付き確率>`_」: P(A|B) = Bが起こったときのAの確率。P(A|B) = P(A∩B)/P(B)
    - 事前確率 = 何もデータがない状況での確率 ⇔ 事後確率 = 何らかのデータが得られた状況での確率
    - 『ベイズの定理により、事前確率に尤度関数の出力値を掛けると事後確率が得られる』
        - 「`尤度(ゆうど)関数(Wikipedia) <https://ja.wikipedia.org/wiki/尤度関数>`_」: 『統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤(もっと)もらしさを表す数値を、「何々」を変
数とする関数として捉えたもの』

- ミニバッチ: 確率的勾配降下法(SGD)において、『1回の更新に用いられるデータセットの部分集合』のこと。

- ソフトマックス関数は説明していない? ⇒ 上記参照。「シグモイド関数の多変量版である」

- Π ⇒ 相乗。読み方は「プロダクト」?

- 積の形だと数値計算しづらいので、両辺に対数を取って和の形に変形する。

- Eが負の尤度関数なのは、学習するときには誤差を減らす方向に進めたいから。

- 正解が「t」なのは、teacher(=教師データ)が由来と思われる。

- p.52の式(2.5.21, 2.5.22)は、p.50の式(2.5.14, 2.5.15)の多変量版なので、添字jが増えている。

- p.53の下から1/3あたりの「各クラスのデータは、平均が」に続く値のうち、真ん中の値のyの部分は「-1.0」ではなく「-2.0」ではないか? すなわち:
    - 誤: [-2.0, 2.0], [2.0, **-1.0**], [0.0, 0.0]
    - 正: [-2.0, 2.0], [2.0, **-2.0**], [0.0, 0.0]

- p.53 intとIntegerの使い分けは適切なのか?

- p.54 nIn, nOutのnは何か? ⇒ 数(the number of 〜)と思われる。

- epochとは? ⇒ 「`epoch(エポック(epoch)について) <http://yutasugii.hatenablog.com/entry/2015/12/16/002617>`_」: 機械学習で1回分のデータを処理するときの単位。epochsで学習回数となる。例えば10エポックで10回分の学習を行うことを示す。

- 「多クラスロジスティック回帰」は、共通の入力を持つ複数のパーセプトロンを並べたものと考えればよい。分類したいクラスの数だけnOutを設定する。
    - 分類するだけなら出力をnOut個用意するのではなく、nOut種類の値を持つスカラ値でも良いのではないか? ⇒ (後述の)多層パーセプトロンだと1段目の出力が2段目の入力になるので、分けておく必要がある。

- train_T, test_T は何か?
    - train_T: トレーニング用の正解データ
    - test_T: テスト用の正解データ

- 混合行列(confusion matrix): 機械学習の性能指標。正と予測してどれくらい正解したか/しなかったか、負と予測してどれくらい正解したか/しなかったかを行列で表現する。p.47参照。

2.5.4 多層パーセプトロン(多層ニューラルネットワーク)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- 偏微分の記号「∂」は何と読むか? ⇒ `∂(Wikipedia) <https://ja.wikipedia.org/wiki/∂>`_ によると以下のものがあるが、それ以外の読み方をされる事例もある模様。
    - デル
    - ディー
    - パーシャル・ディー
    - パーシャル
    - ラウンド・ディー

- 英語だとbackpropagation(誤差を表す語がない)のに、日本語だと『誤差』逆伝播法となっている。
    - p.61 では「誤差」を「backpropagated error」と記している。

- ハイパボリックタンジェント(tanh): 双曲線関数の一種、双曲線正接関数。シグモイド関数はハイパボリックタンジェントを用いて表すことができる。⇒ δ(x)=(tanh(x/2)+1)/2 (参考: 「`シグモイド関数の意味と簡単な性質(高校数学の美しい物語) <http://mathtrain.jp/si
gmoid>`_」)

- Javaのjava.util.Randomの精度は十分か?
    - アルゴリズムは48bit線形合同法(という理解で良い?)
        - 『クラスでは48ビットのシードを使い、このシードは線形合同法で変更されます』(`クラスRandom <https://docs.oracle.com/javase/jp/8/docs/api/java/util/Random.html>`_)
        - 『The class uses a 48-bit seed, which is modified using a linear congruential formula』(`Class Rundom <https://docs.oracle.com/javase/8/docs/api/java/util/Random.html>`_)
    - 線形合同法の欠点は『ある乱数が得られたら、 次に現れる乱数が限られてしまう』こと。(参考: 「`良い乱数・悪い乱数 <http://www001.upp.so-net.ne.jp/isaku/rand.html>`_」)
        - 機械学習に用いると、乱数の偏りも学習されそうな気が。
    - 「メルセンヌ・ツイスタ」(`Wikipedia <https://ja.wikipedia.org/wiki/メルセンヌ・ツイスタ>`_ , `考案者のホームページ <http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html>`_)は、説明を読む限り良い選択であるように見える。
        - 考案者のホームページには各言語向け実装のリンクも記載されている。

- ループにおける配列変数の操作は何故外側から(右側からの添字から)行うのか? ⇒ 連続するメモリ空間へのアクセスになるので、キャッシュ効率が高いため。
    - Javaでは、多次元配列は1次元配列を束ねたものになる(※)ため、メモリ確保時に複数スレッドが競合したり、GCによってメモリが再配置されることにより、分断されたメモリ配置になる可能性があるかもしれない。
        - ※参考: 「`OCA Java SE 7 Programmer I Certification Guide - Arrays <http://www.oracle.com/technetwork/community/join/member-discounts/ocajavase7ch04-1840093.pdf>`_」(PDF注意)

- p.63のソースコードにおける活性化関数の指定方法
    - 文字列による指定/分岐よりもenumの方がよいのでは?
    - 活性化関数の呼び出しインターフェースをinterfaceで定義し、これをimplementsした活性化関数classを直接渡すという方法もあるのでは。

- 「grad」とは何か? ⇒ 勾配(gradient)

- p.65真ん中のソースコードはtを初期化しただけの値がそのまま表示されるのではないか? ⇒ p.55の下から始まるソースコードに入れるということらしいので、実際にはp.56の「return t;」の直前に入れるのではないか?

まとめ
------------------------------------------------------------

第3章 ディープラーニング探求<1> - ディープビリーフネットと積層デノイジング・オートエンコーダ
============================================================================================

3.1 ニューラルネットワークの陥落
------------------------------------------------------------

3.2 ニューラルネットワークの逆襲
------------------------------------------------------------

3.2.1 ディープラーニングの進化 - ブレークスルの決め手
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3.2.2 事前学習ありディープラーニング
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3.3 ディープラーニングのアルゴリズム<1>

3.3.1 制約付きボルツマンマシン
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- 条件付き確率の読み方がわからない。
    - 上の方の記述より再掲: P(A|B) = Bが起こったときのAの確率。P(A|B) = P(A∩B)/P(B)
    - 例えば式(3.3.1)は、結果として(ベクトル)vが得られたときの、隠れユニットの値が1となる確率を表す。

- p83の式(3.3.8)は、4行目の式の先頭に「=」が抜けているのではないか。

3.3.2 ディープビリーフネット
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- p.94のソースコードの「double[][] Z = new double[0][0];」や、p.95の「double[][] dZ = new double[0][0];」は不要なのではないか?
    - 処理としては不要だが、値を代入しないと、未初期化変数を読み出している扱いになるため、コンパイラがエラーを吐く。
        - 単に「= null;」でも良いのでは?

- ソースコード中のclone()の一部は不要なのでは?
    - サンプルソースでは省略されている箇所もある。

3.3.3 デノイジング・オートエンコーダ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* 次回は p.98 の先頭から。

(以上)


[ 戻る ]