備忘録的な何か

研究内容とかプログラミング関連とか趣味(オーディオなど)とかそのへんのことを書いていければいいな

近況報告

ThinkPadが届いて喜んでいるのはいいとして、研究関連のことをしているのかというツッコミが入りそうなのでそういった記事も書いておく。

別にさぼっているというわけではなく、ちゃんと研究はしているのだけれども、ちょっと研究室のノウハウ的な内容になっちゃってブログ記事にかけない、という感じですね。

近日中に『岩波講座 言語の科学 第二巻 音声』という本を読んでいくのでそのあたりのメモ代わりに更新していこうと思います。

ねんがんの ThinkPad X1 Carbon が とどいたぞ

俗にいう「開封の儀」は行っていないので、そのあたりの写真はないです。

2013年モデルのX1 Carbonからいきなり2016年モデルにグレードアップすると、まずその軽さに驚く。1.18kgと200g軽くなったのだが、ずいぶんと持ち運びやすい。指紋認証の感度もよく使い勝手がかなり上がっている。画質もWQHDに上昇(オプションによるが)しておりデフォルトのフォントでも綺麗に描画される。

一方キーボードの打鍵感は薄型化により多少犠牲になっているようで、若干軽くなっているのが気になるところ。Surface bookと似ているといえば似ている。

個人的に特筆すべきことだと思うのがACアダプタで、めちゃくちゃ小さくなっている。かなりうれしい。

タッチパッドも進化していて、反応を遅らせることによりマウスカーソルが反応しにくくなっているためタイピングの邪魔になりにくい。こちらはOSの進化によるものかもしれないが……

デザインは可もなく不可もなく。Lenovoのロゴが目立たなくなっているのは良いかもしれない。ださいし。

よくこの軽さ、この薄さでRAM:16GB、SSD:512GBを実現してくれたなと思います。

 

松尾さんの講演を聴いて@情報処理学会全国大会(2016)

帰りの新幹線の中でちゃんと書いてたのにうっかり変にページ遷移をしてしまったおかげで記事全部が吹っ飛んでしまい萎えていましたが、もう一度書くことを決意した所存です。

講演者の松尾豊さんは東京大学准教授のかたで、日本の深層学習のトップランナーとも言うべきお方。講演内容はがっつりとしたテクニカルなものではなく、どちらかといえば一般向け、メディア向けの内容だった。

以下講演内容の要旨。

松尾さんの講演『Deep LearningとこれからのAI研究』

世間の注目っぷり

近年、人工知能が注目されている。この注目のされっぷりというのは、人工知能第三次ブームとも言うべきものだ。では、なぜ最近再度注目されているのかといえば、原因はこの「Deep Learning」にある。Deep Learningはとりわけ画像処理の分野で躍進を見せており、提示されている画像が何を示しているかを判定するタスクではすでに人間を超えた能力を身につけている。つい数年前では考えられない性能をどうやって叩きだすのか。それは、それぞれのタスクに適合した特徴量の設計を計算機が行ってしまうというところにイノベーションがある。

特徴量とは

いままでは、特徴量の設計というものは人間がヒューリスティックに設計していた。特徴量とは、その名の通り、物の特徴を表すパラメータであり、どのようにパラメータを与えて強化学習を行うかで性能が変わっていた。特徴量を計算機が自ら獲得するということは、計算機が「認知する」能力を獲得したことと同義である。どこのメディアもあまりここの箇所を強く書かないが、私自身は近年の人工知能の成果は「認知」が根底にあると思っている。

画像処理の性能の高さ

Deep Learningの画像処理の高さは本当に驚くものがある。先ほどの例でも上げたが、すでに一部のタスクでは人間を超える性能を示しており、その強さは今世間を騒がせている「アルファ碁」からも見てとれる。「アルファ碁」は画像処理のタスクを処理するDNNで構成されている。元来、囲碁の世界では計算機が人間に勝つのは当分未来の話だと言われていた。それは、チェスや将棋に比べて有効な手段が非常に多いためである。つまり、それだけ最適な特徴量の設計が難しい。だからこそ囲碁で機械が人間に勝つのは当分未来だと考えられていた。ところが、Deep Learningの登場で状況が一変した。最適な特徴量を勝手に抽出してくれるためである。

どのように特徴量を抽出するのか

画像処理を扱うDNNではAuto-encoderというものが使用されている。これは入力層のノード数に対して隠れ層のノード数が少なくなっており、出力層では再度ノード数の数が増え、入力層とおなじ数となる。どのようなものかといえば、5というものが書かれた画像を与えれば、全く同じものを出力するDNNである。一見意味が内容に見えるが、隠れ層のノード数が少ないところがポイントである。隠れ層のノード数が少ないため、今持っているより少ない情報量しか伝播することができない。少ない情報量から画像を復元するには有効な情報を残すしかない。したがって、層が深くなるにつれて有効な情報のみが取得できるというわけだ。この有効な情報が特徴量に相当する。

Deep Learningの今後の展望

画像処理でここまでの成果を残した以上、他の分野でも活用しないわけにはいかないだろう。今後進展が望まれる自然言語処理の範囲でも、言語から画像、画像から言語といったように、言語と画像が相互に変換可能な深層ネットワークを構築するのがよいのではないのだろうか。私自身も、それが王道の手法であるように感じる。

終わりに

Deep Learningは革命的だが、これまでの蓄積があったことも忘れてはならない。今までの人工知能の分野の蓄積があったからこそ、Deep Learingの手法が出てきてから急速に性能を伸ばすことが出来た。既存のテクノロジーとの組み合わせも大いに重要である。また、ソフトウェア面では、日本が海外に遅れを取っていると言わざるを得ない。GoogleFacebookはデータ量も豊富でノウハウも持っている。ここに追いつくのは非常に困難であり、今後のロボット産業でもこのあたりの企業が決勝リーグに進むのは確約されているようなものだ。それではハード面はどうかというと、まだまだこれといった企業や国は決まっておらず狙い目と言ってもよいだろう。日本は土木・機械産業は優秀だ。ハードウェアでは日本が勝てる希望が残っている。率先して研究開発を行うとよいのではないか。すでに世界は動き出している。

 

 

だいたいこんな内容だった。数日経っている上に筆者が解釈した上で書いているところもあるので、多少のバイアスがかかってしまっていることはご了承願いたい。

というわけで筆者の感想ね。

個人的に一つ気になったのが、自然言語処理の分野でも画像がキーとなる、といった発言だ。自然言語処理音声認識、対話戦略、音声合成といったように、簡単に分けても3つの分野に分かれており、その全てにおいて画像というものとは縁がない。どのように適応させるのか、もう少し具体的な内容を聴いてみたかった。可能性があるとすれば、スペクトルを画像として入力し、そのスペクトルが表すテキスト画像に変換して出力するDNN(かなり無理がある)や、発話テキストを画像として与え、その返答としておかしくないテキスト画像を出力するDNN(まだましかな?)や、テキスト画像からスペクトル画像を出力するDNN(無理がある)といったところだろうか。無論既存技術との組み合わせが重要なことは違いないが、そこまでDNNを神格化する必要があるのかは疑問に残った。

熱しやすく冷めやすい、というのは流行の性格で、もっと人工知能ブームが続くことを祈った松尾さんの計らいなのかもしれない。

情報処理学会全国大会(2016)一日目(2R)

ホテルのロビーに着いた。ので執筆。

さて、タイトルについて少し説明しておこうかな。

先の記事の1Rとか本記事の2Rとかの説明ね。R会場は自然言語処理関連の会場で、それの今日(3/10)の最初のセクションが1Rで、2つ目のセクションが2R。3Rは明日の午前中。のはず。

それだけ。

それでは本題。

2Rの発表!!

構成要素に着目した顔文字の意味分析

さて、誰しも一度くらいは使ったことのある顔文字。顔文字の意味を解析し、機械にクラスタリングをさせようというタスクについての研究は色々とある。ようだ。

本研究では三好らの研究と黒崎らの研究が先行研究として紹介されており、それぞれのクラスタリングの精度は89%と75%でどちらもかなりの高さである。ただ、それぞれに欠点があり、三好らの手法では人手によるラベル付けの作業が必要であり、さらに新出の顔文字には対応しにくいといった欠点がある、というようなことを発表者の方はおっしゃっていたような気がする。正直記憶は曖昧なので各自ソースを確認されたい。

黒崎らの手法の欠点についても述べられていたような気がするが、忘れた。

ということで本研究ではWord2Vecを用いた手法が提案されている

Word2Vecの詳細はWebで検索してもらえばいくらでも詳しい資料は出てくると思うので、ここでは概要にとどめておく。世の中にはたくさんの言葉があり、それらの類似度を図るのは難しい。そこで、言葉を200次元程度のベクトル空間に射影していく。類似度の近い言葉ほどベクトルが近くなるというイメージ。

これを顔文字に応用しようというのだ。次の2つの顔文字を比べて欲しい。

(T▽T)

(TωT)

どちらもどことなく悲しみを表していると感じないだろうか。この2つの顔文字で共通しているのは「T」である。つまり「T」は悲しみのベクトルを持っているといえよう。

顔文字で良く使われる文字に関して、パーツごとにベクトル上に射影し、それらのベクトルの和を取れば、なんとなくその顔文字を表すベクトルが描けそうではないだろうか。まとめると、

  1. 顔文字を分割して構成要素単位で分析(目、口など)
  2. 構成要素ごとにベクトル空間上へ写像
  3. 各要素のベクトルにそれぞれの重みを掛けあわせたものの総和がその顔文字のベクトルとする

このような感じだろうか。

というわけで次がこれでクラスタリングを行った結果である。

実験結果

日本語ツイート約1500万件のうちに含まれていた、文集合中の352種の顔文字を分析対象に行った結果、ランダムに行うよりも性能は高かったが、先行研究を超えることは出来なかった、という結果に落ち着いていた。

結果として考えられるのは、正解ラベルとして与えたのが少数のアノテータによって行われているため偏りが生じているとか、同様の理由で各パーツに与えたラベル(パーツに与えたのはパラメータなのかな?)に偏りが生じていたとか、そのあたりだろうか。

個人的な感想としては、提案手法を聞いた時にはもっと高い性能がでそうだと感じたので拍子抜けといったところが強い。なかなか興味深い研究でした。

 

次!!

 

Random Forestを用いた財務業績に影響を与えるCSRの具体的内容

タイトルひょっとしたら少し違うかもしれないCSRの後が自信ない。

かなり実務的な内容で、結構こんがらがりながらメモしたので読みづらいかも。堪忍ね。

ええと、近年CSRが注目を浴びている。らしい。というのもこの研究で初めてCSRという言葉を聞いた。CSRとは企業が社会に対して責任を果たし、社会とともに発展していくための活動のこと。企業はCSRよってステークホルダーから信頼を得ることができる。それにより収益が増加する可能性がある。先行研究でも、CSRと企業業績は正の相関があると言った報告が多数あるらしい。

ならば、どのCSRが業績向上に最も貢献しているか、といった情報がほしいよね、といったところで情報学の出番である。で、提案されていた手法は次のようなものである。

  1. CSRデータから特徴量を抽出
  2. 財務データからクラスを作成
  3. ランダムフォレストによる学習

うん、さっぱりしてるね。いかにメモが足りていないかがバレちゃうね。

CSRデータから特徴量を抽出する際には少し処理がいるようだ。CSRデータの中でも、アンケート形式による質問に対し、それに対する解答であったCSR活動37項目を特徴量とし、抽出するデータはアンケートの解答番号とする(すいませんそのように受け取りました。違うよ、という人がいればご指摘ください)。

使用する財務指標はCSRの特徴より、長期的視点によらなければならないため、それに見合った指標を用いる必要があるとのこと。その指標の名前は聞き逃した。

というわけで

実験結果

NPO-NGOとの連携が重要。内部告発窓口は重要度が低い。

簡素でごめんね……。学部三年生では10分程度の説明でこの程度の理解が限度だったよ……

 

#会場でのコメントで気になったのが、相関関係があることは示されているが、CSRを行っているから業績が上がったというのは論理の飛躍がある、という趣旨のものだ。冒頭で先行研究によって相関があるという報告を受けた上での結論だったと思うが、それではまだ足りないらしい。実験の考察の難しさを感じました。

 

ほい次!!

というか最後!

深層学習を用いた画像を生成する文生成手法の一考察

これ聞いててめっちゃ興味深かった。なにかと考えさせられたし、研究室の人間ともあれはどうだったんだろ、とか色々話せる良いネタだったと思います。

え、メモ?

とってないよ?

いやだって話聞くので精一杯だったし。

覚えている範囲でいい??

仕方ない……

本研究は、ある画像を見ている時の脳の観測データ画像から、見ている画像を説明する文章を自動生成しようというタスクをDNNを使用して解決しようというお話。

Chainerとか、自己符号化器とか色々使ってましたよ。

このくらいで許してください……。続きは論文で!!

 

 

そろそろチェックインしてきます…

情報処理学会全国大会(2016)一日目(1R)

というわけで会場に来ています。

面白いセッションがいくつかあったので紹介。ただ会場で走り書きしてるため、聞き間違いや聞き逃し、思い違いがあることは否めず、そこまでの正確性は保証できないのであしからず。

一つ目:

雑談対話における未知語や属性の獲得のための質問生成

これまでのシステムの雑談はユーザの発言に対してオウム返しに聞き返したり、無難な返答をすることが多い。例えば、

ユーザ:ラーメン食べたい

システム:ラーメンはおいしいですね

みたいな。ラーメンをそのまま継続してオウム返しに使用している。これでは面白くないだろ、という思想がこの研究の根底にある。

 

ユーザ:バーニャカウダを食べた

システム:バーニャカウダってなんですか

 

このようにシステムが知らない言葉(=未知語)を尋ねるときにオウム返しに聞き返されるばかりでは面白くない。ちなみにこのような聞き方を「明示的確認」と定義されていた。

誰しも一度くらい、知らない言葉が会話中に出てきて、「あー、あれね!」みたいな感じで知ったかぶりをしたことがあるだろう。それで会話をごまかして続けていって、なんとなくどのようなものだったか察するという作戦。この作戦は「暗黙的確認」と定義されていて、これをシステムにやらせようというのが本研究の内容だ。

未知語に対してクラスタリングを行い、どのようなジャンルのものかを予測し、それを元に会話を生成すると都合がよい。

 

ユーザ:バーニャカウダを食べた。

システム:イタリアンはおしゃれなご飯が多いですね。

ユーザ:そうだね

 

システムは「バーニャカウダ」を知らないけど、ユーザ発話の「食べた」という発話から「食べ物」と予測でき、さらに文字の響きからなんとなーく「イタリアン」だと予測し、例のような発話を生成する。

提案されていた手法は、

  1. いくつかの言葉を人手でラベリングし、それを教師として機械学習を行う
  2. 未知語に対し適応し、予測する

このようなシンプルな手段である。

一つおもしろいのが、最下層のクラスタリング結果を採用するのではなく、中間層のクラスタリング結果を採用する点である。以下例。

 

バーニャカウダを食べた→パンは美味しいですよね(パンという最下層クラスを用いたが誤り)
バーニャカウダを食べた→洋食はおいしいですよね(洋食という中間クラスを用いると正解)

 

例のようにパンという最下層のクラスを用いると範囲が狭すぎて誤りとなってしまうが、中間クラスを用いることでクラスの幅が広がり、誤った返答が行われなくなるという利点がある。誤った返答をしてしまうと対話破綻に陥るため、正しい返答を行うことは非常に重要である。

とはいえ、焼きそばパン、といったものは焼きそばパンの「そば」に引っ張られて和食とクラスタリングされてしまったとのこと。

 

発表では言及されていなかったが、辞書を改良することで解消されそう。もしくは複数の名詞が組み合わさった名詞にはある程度重みを与えて解析にブレが生じないようにすると良いかもしれない。いずれも辞書をいじる必要がありそうだ。

 

心に響く励まし文の自動生成

つらいときに慰めてくれるシステム。斬新だ。実際これが実現できると人間味が増すのではないだろうか。

とはいえ文の自動生成は骨が折れる。通常のシステムは自力で文章を生成できないからだ。

そこで本研究では、名言とされる文章を構文解析・頻度解析を行うことで、名言テンプレートを作成し、ユーザ発話からヒントを得て励まし文を作成するというアプローチを取っている。

例えば、「AにBするよりも[だからこそ]、CにDがある」 (Aには名詞、Bには動詞、Cには名詞、Dには形容詞(プラスの意味)が入る)

というテンプレートが生成されたとする。これを元に次の対話を見てみよう。

 

ユーザ:試験に落ちた

システム:試験に受かるよりも、勉強の過程に価値がある

 

このシステムはユーザが落ち込んでいるという前提で作られているため、落ちるの対義語の受かるを当てはめて、「試験に受かる」という文章を作成する。これをN-gramに当てはめ、その前によく使われている「勉強」という言葉を得て、これをユーザが行っていたと予測し、上記のテンプレートに当てはめていく(分かりにくい説明ごめんね)。

このような手法で作られたシステムの発話は、主観評価であるが、人が作成した文章と遜色ないという結果がでたとのこと。

 

ただセッション後の質疑応答での指摘もあったが、主観評価以外のデータも欲しいところではある。難しいんだけどね。

 

まとめ

発表のしかたなど、とても参考になった大会でした。後日もうちょっとまとめて再アップロードするかも。

 

SCPコマンドの使い方

SCPコマンドってわかりにくくないですか??

SCP 使い方

とかでググると大抵こんなのが出てくる

 

$ scp [[user@]host:]file1 [[user@]host:]file2
 
なにも間違っちゃいない。実際これでダウンロードしたりアップロードしたりできる。
けど実際このコマンド使う時にはsshでログインとかしてると思うんですよ。だってダウンロード/アップロード先のパス知りたいじゃないですか。
パス見つけますよね。ああここが目的のパスねって。
じゃあ上のコマンド打つじゃないですか。
 
$ scp [[user@]host:]サーバ上のパス [[user@]host:]ローカルのパス
 
エラーでるじゃん。ダウンロードできないじゃん。
キレそうってなるわけです。
パスが見当たりませんとか言うわけですよ。
よくよく考えると、当たり前ですね。sshでログインしっぱなしですもんね。この操作、サーバからサーバへコピーしようとしてるわけですよ。そりゃパスも見つからんわ。
 
というわけで新しくターミナルを起動して、さっき打ち込んだコマンドを打ち込んでみましょう。
動きましたね……。
 
Windows OSの方はWinSCP使ったほうが絶対に幸せですよ。そういう環境がない方は知っていたほうが人生幸せになりそう。
 

音声認識の音響モデルにおける深層学習(事前学習編)

まとめている間にネットワークのコネクションが切れてしまい、下書き保存もしてなかったのでさらっぴーの状態から書き直すはめになった。いじけていたもののそろそろ書かんといかんということで再開。

音響モデルに深層学習を適用するときには、前回勉強したハイブリッド方式が採用される。つまり、HMM状態を推定するときにDNNを使用する。

RBMによる事前学習を用いたDNN-HMM

そもそも事前学習ってなんだというところから。

DNNでは学習が必須、というよりかはDNNを学習させることをDL(Deep Learning;深層学習)と呼ぶのだが、学習する段階も事前学習と事後学習の2つに分けられる。

メインの学習は事後学習で、入力を与えて出力が期待値と異なれば、各ノードの重みを調整して期待値に近づけるという操作を行う。

なんか事後学習だけで完結してそうな気もする。実際、層の数がそれほど多くなければ誤差逆伝搬法などの学習法で対応可能である(ような気がする)。

ではなぜ事前学習が必要なのかというと、入力層に近づくにつれて勾配が消失してしまうことにある(誤差が少なくなってしまうと言い換えてもいいかもしれない)。それでは困ったことに入力層付近の学習がいつまで経っても進まないということになる。

ということで事前学習の出番である。事前学習で予め入力層に近い層を学習させておいて、誤差逆伝搬法などで全体を学習する。頭いい。

数ある事前学習の手法の内の一つにRBMを用いたものがある。

 

RBM(restricted Bolzmann Machine):制限ボルツマンマシン。完全二部グラフによって定義された隠れ変数ありのボルツマンマシン。二層だけのニューラルネットワークみたいな感じかな?

 

ベルヌーイ・ベルヌーイ型とかガウス・ベルヌーイ型とかあるんですが、ここの事前学習で用いるのはガウス・ベルヌーイ型。なぜかというとベルヌーイ・ベルヌーイ型ではバイナリデータしか取り扱えないためである。この手法で用いられるDNNは実数値を取り扱わないといけないため、それが可能であるガウス・ベルヌーイ型を使用しなければならない。

相変わらず細かな式は省略。もっと細かく書いてある専門書や他のブログを参考にしてください。式書くのめんどくさいし、そんなことやってたらこのブログ続けられない。

で、アルゴリズムの概要だけ書こうかとも思ったけどこれが結構難しい。

http://hil.t.u-tokyo.ac.jp/mklab/publications/Takamune2014Ongaku05published2.pdf

こんなの理解できないよ!、となってしまう。以下(僕みたいな)そのような人向け。

たぶんこんな感じで事前学習が進んでいく。

  1. 第1層目はRBMをCD-1法を用いて学習する。-1はサンプリングステップを一回だけ行うよということ
  2. 2層目以降はベルヌーイ・ベルヌーイ型RBMを積み重ねてDBMのように学習する

ふーん……。

分かりやすい素晴らしいブログを見つけてしまったのでそちらを記しておく。

qiita.com

……ボルツマンマシンについてはまた後日復習しよう、ね。

雑音除去自己符号化器による事前学習

RBMみたいな確率的ニューラルネットを使わずに確定的ニューラルネットを使ってやってみよう!みたいなノリ。

RBMは乱数による確率的な動作をしているから確率的ニューラルネットと呼ばれている。

これは何をやるのかというと、

  1. 入力データに予め雑音を入れておく
  2. 符号化を行って、雑音を加える前に近い状態にする
  3. うまくできるまで学習

という手順を踏む。これで雑音に対してロバストな性質を得ることができる。細かな内容は省略。とりあえずこんな性質があるよということで。

識別的事前学習

事前学習の段階でラベル与えちゃえば、最初から識別的な規準で学習できていい初期値が手に入らないかな、という発想で行われる手法。

  1. 隠れ層1層のDNN(入力層1、隠れ層1、出力層1の計3層)で交差エントロピー学習を行う
  2. 隠れ層→出力層の重みを初期化し、隠れ層を追加して再度交差エントロピー学習を行う
  3. 所定の層のDNNになるまで1と2を繰り返す

…文字だと分かりにくいから、気力がでたら図を書こう。

まとめ

事前学習にはいくつか種類があるが、どれが最も適した事前学習かは謎のまま。どれも一定の成果を残しているのだろう。相変わらず試行錯誤の多い分野だなぁ。

参考文献

神嶌敏弘ほか(2015)『深層学習』近未来科学社

http://hil.t.u-tokyo.ac.jp/mklab/publications/Takamune2014Ongaku05published2.pdf

RBMから考えるDeep Learning ~黒魔術を添えて~ - Qiita