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

北野坂備忘録

主にインストールやプログラミングのメモを載せています。

プログラマから見たソフトマックス関数

 機械学習において、ソフトマックス関数はロジスティック回帰の一般化としてとして現れます。ロジスティック関数のあとで説明されるのが通例です。
 式はこちら。
ソフトマックス関数 - 機械学習の「朱鷺の杜Wiki」

 多クラス分類問題に用いられます。

 以前から、「なぜこの関数を一般化ロジスティック関数と呼ばずにソフトマックス関数と呼ぶのか?」と思っていました。
 
 理由は「高校数学の美しい物語」で分かりました。
mathtrain.jp

 こちらの「ソフトマックス関数の性質」の項で、

例えば,x=(10,2,1) とすると,y=(0.9995⋯,0.0003⋯,0.0001⋯) となります。マックス関数(一番大きい成分を 1 にして,それ以外のものは 0 にする関数をこう呼ぶことにする)をソフトにしたという感じです。

と解説されています。
 これで腑に落ちました。

 プログラミングをしている人ならMAX関数と言えばすぐに理解できると思います。このMAX関数をソフトにしたものがソフトマックス関数であり、

・MAX関数と違ってベクトルで返す。
・大きな成分が過大に(1に近く)評価され、小さな成分が過少に(0に近く)評価される。

関数だということが分かります。

 プログラマからすると、ソフトマックス関数はロジスティック関数から説明されるよりMAX関数から説明してもらったほうが分かりやすいですし、下手をするとソフトマックス関数の説明をしてもらってからその特別な場合としてロジスティック関数の説明をしてもらったほうが理解しやすいかもしれません。
 

目標値を{-1,1}にする理由

 問題によって、目標値{ t_n}を{0,1}ではなく{-1,1}にするときがあります。
 こうすることによって、{ t_n^2}が1になります。式中から{ t_n^2}を吹き飛ばすことができるわけです。
 微分を行う場合、計算が楽になるように係数に1/2を入れておくのと同じようなテクニックですね。

機械学習(カーネル法)におけるグラム行列

 数学的(線形代数学的)にはグラム行列とは正方行列Aが与えられたときに、その随伴行列A*とAを掛け合わせたA*A(この*は掛け算ではなく随伴行列記号)のことをAのグラム行列と言います。
 随伴行列とは複素数を成分にとる m×n 行列 A に対して、

1) 転置して
2) その成分の複素共軛(実部はそのままで虚部の符号を反転する)をとった

n×m 行列 A* のことです。
 ただし、グラム行列の場合はAが正方行列(n×n 行列)という制限がかかりますので、随伴行列もn×n 行列になります。


 これに対し、機械学習の分野でグラム行列とは単に

{ x_n , x_m }カーネル{ k(x_n , x_m) } を n,m 成分とする行列のこと

であり、「{ k(x_n , x_m) }を要素に持つグラム行列」と表現されることもあります。
 イメージ的にはカーネル関数を行列で表したもの」と思えばいいでしょう。
 具体的には「n個のデータに対する全相互カーネル値の一覧」です。
 こう言われると、

「ああ、いかにもカーネル法のいろんなところで出てきそうな行列だなあ」
「n(データ数)が増えたら計算が大変だろうなあ」

ということが分かると思います。

 グラム行列を使うと何がうれしいかと言うと、元の空間の次元が高くても(無限次元でも)計算量があまり増えないということです。逆にデータ数が多いほど計算に時間がかかります。
 となると、今度は効率化として

・近似
・データ量を減らす

などが出てくるわけです。
 グラム行列計算の効率化についてはこれまた巨大な分野なので今回はここまで。

Chromeでエンコードはできなくなりました

表示の高速化を図るため、Chrome バージョン55 からエンコード機能がなくなりました。

(今までは「ツール」>「エンコード」が存在したがなくなっている)

とりあえず Chrome はもう使わなくていいや。
ユーザにすれば「速いかどうか」よりも「見えるかどうか」のほうが重要ですからね。
IE, Opera, Vivaldiあたりが代替ブラウザですかね……。

Ubuntu で vi のバージョンアップ(フルパッケージvim化)

 CentOS から Ubuntu に移るとキレる人がいます。
 特に vi を使用していた人がキレやすい。CentOSのviで使えていた機能が軒並み存在しないからです。
 これは、Ubuntu に最初からインストールされている vi が Vim-Tiny といって、vim でありながらオリジナルの vi と同程度の機能しかない vim だからです。
 CentOS から Ubuntu に移った人は、

sudo apt-get install vim

 とすると幸せになれるでしょう。 

北野坂備忘録の人気記事

 ブログを開始して一年ほど経過しましたので、人気のある記事を見ていきたいと思います。

1位

kenichia.hatenablog.com

 これは安定して読まれてますね。

2位

kenichia.hatenablog.com

 素人向け・機械学習初心者向けに書いているせいか、「言語処理100本ノック 2015年版」の解説記事はありがたいことによく閲覧されているのですが、一番閲覧が多いのはこちら。
 72番までの問題と比べ、いきなり難易度が向上しているからだと思います。
 「素性」について解説している72番の記事もよく読まれていました。

3位

kenichia.hatenablog.com
 機械学習を勉強している学生やITエンジニアはTOEICに興味があるのか、この手のTOEIC記事も人気がありました。

 あとはmecab系の記事やCentOS に Tensorflow突っ込む記事なんかも読まれています。
 TensorflowをCentOSに突っ込むのは推奨しないのでこれは逆に良くなかったかな……。
 mecabが人気なようなのでまた少し記事を書いてみたいと思います。

日本のオープンデータは構造的に失敗する

 今日はいつもと違ってオープンデータのお話です。
 「オープンデータ」という言葉が言いだされてからかなりたちましたが、日本での成功例はあまりありません。
 これは構造的なものです。
 基本的に、アメリカ(オープンデータの本場はイギリスですが)でうまくいったものは時間をおいて日本でも成功します。
 例を挙げると、 WindowsiPhone です。
 ところが、ある種のものは成功しません。
 それは何かと言うと、「社会構造が違うもの」です。
 一番わかりやすい例を出すと、「デカい車」です。

 一時期アメリカでデカい車が売れました。
 時間をおいて日本で売れたのか?

 売れません!

 日本の社会構造はデカい車が走れるようになっていないのです。
 ですから日本でデカい車は売れませんでした。
 同じことがオープンデータでも起こっています。

 オープンデータは「課題を発見するツール」です。
 オープンデータにより課題は発見できます。
 重要なのは、課題を発見することではなく、課題を解決することです。
 日本では、だいたい「オープンデータで課題解決!」と言うと、何かのアプリを作って終わりです。ただ、数年前までは「課題発見」だけで「アプリの開発」にすら辿り着いていませんでしたから、その分は進歩しています。
 アメリカやイギリスがオープンデータで成功しているのは、「市民が課題を解決する仕組み」がアプリ以外に存在するからです。
 日本でいうところのNPOのようなものを市民が自分で立ち上げて解決していくわけです。
 日本はそういう仕組み、風土がありません。
 アプリを作るか、「この解決は自治体でやってください」でシャンシャンです。
 「市民が自分たちで課題を解決する」という社会構造がないので、いくら市民にデータをオープンにしたところでいつまでたっても課題は解決されないのです。
 積極的にオープンデータ活動に携わっていく中でこのあたりのジレンマに気付いてしまった人たちは、「日本のオープンデータには出口が無い」という表現をされることがあります。言い得て妙です。