ウォンツテック

そでやまのーと

Deep Learning

# Deep Learning 5

逆誤差伝搬法の数学的お勉強

高卒でもわかる機械学習 (5) 誤差逆伝播法 その1 | 頭の中に思い浮かべた時には

前回見たスライドはスライド48のあたりがイマイチ分からなかったので上記で読み直し
さらに分かりやすいです

逆誤差伝搬法は計算量を如何にして減らすかという事で、N層パーセプトロンがある場合は
N層、N-1層、N-2層と逆順に、重みの微小変化(その層の重みによる勾配法で損失関数を減少させる)をみていきます。k-1層の計算時点でk層の計算結果を利用出来るようになっているとうのがキモ


本のp.148 (5.13)の補足
 \frac{\partial L}{\partial {\bf X}} = \frac{\partial L}{\partial {\bf Y}} \cdot {\bf W}^T

この式の1要素目に着目し、図5-24のX → X・W → Yの1要素目の計算の流れを見てみると

 (x_1, x_2) \cdot (w_{11}, w_{12})^T x_1 w_{11} + x_2 w_{12} y_1

となっていてYへの出力に関しては
 \frac{\partial L}{\partial x_1} = \frac{\partial L}{\partial y_1} \frac{\partial y_1}{\partial x_1} + \frac{\partial L}{\partial y_2} \frac{\partial y_2}{\partial x_1} + \frac{\partial L}{\partial y_3} \frac{\partial y_3}{\partial x_1}

となっていて
 y_1 = x_1 w_{11} + x_2 w_{12}
 y_2 = x_1 w_{21} + x_2 w_{22}
 y_3 = x_1 w_{31} + x_2 w_{32}
を代入すると

 \frac{\partial L}{\partial x_1} = \frac{\partial L}{\partial y_1} w_{11} +  \frac{\partial L}{\partial y_2} w_{21} +  \frac{\partial L}{\partial y_3} w_{31}
 =  ( \frac{\partial L}{\partial y_1},  \frac{\partial L}{\partial y_2},  \frac{\partial L}{\partial y_3}) \cdot (w_{11}, w_{21}, w_{31})
 =  \frac{\partial L}{\partial {\bf Y}} \cdot W^T
と書ける。
W^Tは3行2列中の1列目のみ

これを他の要素( x_2)に関しても導くと 5.13 の上の式が導ける。下の式も同様な感じで導ける

商標登録の出願

個人で作っているWebサービスのサービス名(ロゴではなく文字のみ)の商標登録出願をやってみた

結論から言うと出願自体はすごく簡単。

やりかたをざっくり書くと


1. 特許庁の商標登録出願のpdfを熟読

http://www.jpo.go.jp/shiryou/kijun/kijun2/pdf/syutugan_tetuzuki/05_01.pdf#page=5
これのp.548 ~ p.557あたりまでを熟読する


2. 出願用のwordファイルを探す

上記pdfのp.552のフォーマットのwordファイルを探す(このフォーマットを一から作ってもよい)

3. 出願用のwordを書く

個人で出願する場合は以下を記載すればOK

  • 書類名
  • 整理番号
  • 提出日
  • あて先
  • 商標登録を受けようとする商標
  • 標準文字

(上記「商標登録を受けようとする商標」の枠の下側に【標準文字】とだけ記載)

  • 指定商品又は指定役務並びに商品及び役務の区分
  • 区分(【第42類】等)
  • 指定商品(指定役務)
  • 商標登録出願人
  • 住所又は居所
  • 指名又は名称

(名前の横に自分の名前の判子を押印。印鑑登録してなくても大丈夫)

  • 電話番号

全て全角(数字も)で記載し、フォントサイズは10〜12、左右の空白は2〜2.3cmとする(一番左側や右側に位置している文字からの余白)

指定商品(指定役務)の部分は以下のサイトなどから区分に該当する箇所を抜き出してくる(全部書いてもよい)
商標登録: 指定役務リスト


4. でかめの郵便局又は特許庁で特許印紙を買う

印紙代は以下のサイトを参考に。(ちなみに2区分で出願する場合は20600円)
産業財産権関係料金一覧(2016年4月1日時点) | 経済産業省 特許庁

5. 特許庁で最終確認してもらう

出願時に足りない箇所等あれば教えてもらえるので聞く

6. 出願

問題なければ印紙を貼り付けて出願。
紙で提出した場合は電子化代が必要で郵送で送られてくるそう。それを郵便局で支払う。
※電子化代はまだ払っていないが出願時にもらう紙によると1200円+(700円x枚数)との事なのでおそらく1900円。


以上終わり
おそらく弁理士に頼むメリットとしては出願しても申請が通らないケースがあるのでそれの判定や
適切な出願範囲(間違えると範囲外の権利を主張出来ない)を考えてもらえる事がある。
自分みたいにとりあえず適当な範囲でいいので出願したい場合は要らなかった。

Deep Learning

# Deep Learning 4

誤差逆伝搬法の勉強

前の章で実装した損失関数の勾配の微分計算はとてつもない時間が掛かるのでそれを早くしましょうっていう話。

計算グラフで説明するとの事だったので概要を理解したく以下のスライドを読んでみた

www.slideshare.net

かなり分かりやすい

Deep Learning

Deep Learning 勉強 3

勾配法

前回勉強した損失関数は訓練データが如何にテストデータ(正解)に近づいたかを示す関数で、2乗和誤差や交差エントロピー誤差などは0に近いほどテストデータに近いと定義されている。

最終的な目標は認識精度を上げる事なので、3.6.2 ニューラルネットワークの推論処理でやった最終的な正解の割合(accuracy)を指標としても良さそうですが、これだとパラメータ(重みとバイアス)の微小な変化に対してほとんどが変化しない事が問題となるそうです。

言い換えるとパラメータを入力、推論結果(accuracy)を出力とする関数を考えるとほとんどの入力で微分が0となり、0に近いパラメータをさがす事が事実上出来なくなる。

これらを解消するため損失関数という入力に対して連続な(微分可能な)関数を選んでいます。

勾配法はこの損失関数を入力で微分偏微分)し、最小となる入力パラメータを探す方法の一つで
4.4.1では最急降下法というアルゴリズムが用いられていて

 x_(n+1) = x_n - \eta \frac{\partial f}{\partial x_n}

となってます。
この方法は極小値を探すのには向いてますが、最小値を探す場合は様々な初期値で試す必要があるとの事。

Deep Learning

Deep Learning 勉強 2

損失関数

訓練データがテストデータのに如何に近づいたかを図るための関数
損失関数の結果が0に近いほど正解に近い。
損失関数には以下の二つがあるらしい

2乗和誤差: \frac{1}{2} \sum_k (y_k - t_k) ^2
交差エントロピー誤差: - \sum_k t_k log y_k

4.2 損失関数の交差エントロピー誤差

cross_entropy_errorで微小な値を追加しているので少し考察

 log(y + delta) = log(y ( 1 + delta/y))]
  = log y + log ( 1 + delta/y )

ここでdeltaは微小な値なので 1+ delta/yは限りなく1に近い
これより  log (1 + delta/y)は限りなく0に近いことになるため

 log (y + delta) \fallingdotseq log y

といえる。

4.2.4 バッチ対応版交差エントロピー誤差の実装

tがラベル表現だったらの箇所の意味がいまいちわからなかったけど
バッチサイズが5だとすると、tがone_hot表現の時は

t1 = [[0, 0, 0, 1],
      [1, 0, 0, 0],
      [0, 1, 0, 0],
      [1, 0, 0, 0],
      [0, 0, 1, 0]]

という表現で行が各々のテストデータの結果で、列が出力の数。
tがラベル表現の時は

t2 = [3, 0, 1, 0, 2]

というように各々のテストデータの結果の正解インデックスの値ということ

Deep Learning

Deep Learningの勉強

今日からO'REILLYの「ゼロから作る Deep Learning」を読み始めます。

ブラックボックスは極力使わずにゼロから積み上げるコンセプトが気に入りました。

python 3系のインストール

本で使用しているpythonのversionは3系で、手持ちのmacbookはpython2だったのでupgradeしておく

環境を切り替えられるようにpyenvのインストール

brew install pyenv

.zshrcに以下を追記して読み込み

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

インストール可能なlistの表示

pyenv install --list

本推奨のanacondaをインストール

pyenv install anaconda3-2.4.0

anacondaをインストールする事によって本書に必要なNumPyとMatplotlibもインストールされるとの事

インストールの確認

環境の切り替え

pyenv global anaconda3-2.4.0

確認

python --version

こんな感じに表示されればOK

Python 3.5.0 :: Anaconda 2.4.0 (x86_64)

ヤフオクAPIラッパーを作ってgemに登録してみた

ここ最近

暇つぶしで、嫁のやってる事を楽にするための超嫁得Webサービスrailsで立ち上げて遊んでました。

yahooが提供しているヤフオクapiをごにょごにょしていい感じに表示させるWebサービス(ユーザーは嫁のみ)なんですが

http://developer.yahoo.co.jp/yconnect/

このyconnectを使ってoauthで認証する系のAPIの使い方が分からなくて手こずってました。

omniauthってので認証してaccess tokenをゲットするまではある程度すんなり出来たけど、その先のtokenを使ってどうやってAPI叩けばいいの?ってのに嵌りました。

認証が必要ない場合のAPIを叩くgemはあったんですが、認証が必要な場合のが無かったので自分で作ってついでにgemとして登録してみました。

https://rubygems.org/gems/yahoojp-auction-api

ただのラッパーなんだけど慣れてないとこんな情報あるだけで助かるんですよ。