人工知能してみる

人工知能の中の人が機械学習とか統計とかAI的なことを書き連ねます

SCAN: 視覚概念による抽象的な階層構成の学習

こんにちは、Grahamianです。
先日発表されたDeep Mindの論文がなかなかに衝撃的なのでザックリと紹介を書いてみます。
深く読めていないので誤りがあったら指摘願います。

SCAN: Learning Abstract Hierarchical Compositional Visual Concepts
deepmind.com

概要

Deep Mindが新しいニューラルネットワークコンポーネント SCAN(Symbol-Concept Association Network)を発表した。
SCANは人間の視覚と単語の獲得を模倣したモデルである。
これにより視覚と単語の概念を結びつけ、それらを階層化して学ぶことができる。
かつてのモデルに比べて少量の学習データから学習することが可能。
そして経験したことの無い概念でも、その概念に対応する視覚例を想像することができる。

新規性

少量の画像と単語の組み合わせから学習できる
概念を階層化し経験の無い概念でも視覚例を想像させることができる

やってることは?

壁、床、オブジェクトのの3つが存在する画像とそれを見るカメラが存在する。
この画像は色や回転などで変化が生じる。
f:id:Grahamian:20170716212247g:plain
これは赤ちゃんの視覚を単純化したものである。
この画像に対して言語入力を行う。
"red suitcase, yellow wall"
このような入力を繰り返すことでSCANは次第に"red", "suitcase", "yellow", "wall" の概念を覚えていく。

これを利用して"AND", "IS", "IN COMMON"のような論理演算子を覚えさせることもできる。
例えば"golden delicious"(黄色いリンゴのこと)のイメージと"golden delicious IS yellow AND apple"という言語入力と画像を与える。

このようにして学んだ単語概念をもとに似た概念を結合したりして新しい概念を作るように指示することができる。
これによって経験したことの無い概念でも視覚例を想像させることができる。
たとえば、青いりんごは"blue AND apple"、Granny Smith(青りんご)は"granny smith IS golden delicious IGNORE yellow, AND green"といった具合だ。

何が嬉しいの?

既存の概念を再構築することで新しい概念を学ぶことができる。
これはまさに人間の学習方法である。
人間のように教師なしで様々な物事を学ぶアルゴリズム開発の大きな一歩といえる。

いやーDeep Mindの進化は凄まじいですね。
世界の技術力に対して2歩は先を行っていると言っても過言ではないですね。
さらなる進化に注目です。

予測精度はKPI足り得るのか?

こんにちはGrahamianです。
今日は予測精度について話します。

プロダクト開発においてKPIの設計は非常に重要です。
最近のWEBプロダクト開発ではKPI設計が成否を分けているといっても過言ではありません。
しかし機械学習を用いるとKPIの設定が非常に難しくなります。

例えば...

レコメンドエンジンや工業的なものは評価が簡単ですね。
これはアウトプットがCTPや不良率など分かりやすい数字として現れるからです。
もちろん、これらも実際に機械学習がどのように影響を与えているのか評価する必要がありますが影響は割りと直接的です。

しかし、実際のwebプロダクトなどでは評価するのが難しくKPIの設定が難しいです。
プロダクト中の何かの精度が10%上がったとしてプロダクトとして性能がどのくらい上がったと言えるのでしょうか?
10%の上昇がユーザー体験をどれほど向上させるのかは評価が非常に難しいです。
コホート分析や利用率などである程度分析できますが、影響が直接的でないため評価しにくいといえるでしょう。

つまり...

KPI設定が難しいことはROI評価が難しいことにつながります。
導入することはエイヤっとやってしまってもよいのですが、そこからイテレーションするにあたってどのくらい投資すれば良いのかが難しいです。
80%から90%に上げてどのくらいリターンがあるのか。
これは重要な要素ですがその評価が困難です。
「作りっぱなしではなく精度向上したい、でも機能の追加にリソースを割きたい」
そんな悩みを抱えてる企業は多いのではないでしょうか?

解決策は?

確実な判断方法はありません。
プロダクトのステータスによっても変わるでしょうし、リソースにもよると思います。
それがコア技術であるなら精度をあげる重要度が変わるかもしれないし、重要でも精度向上がUXに大きな影響を与えないかもしれません。
もしかしたら10%では全然変わらないけど20%あげたら革命的に変化するかもしれません。
ここらへんは確実なやり方が無い領域だと思います。
個人的には新機能をバンバン開発したいのですけどね(笑)

なぜ機械学習を使ったプロジェクトは失敗するのか

おはようございます。Grahamianです。
世間では猫も杓子も機械学習ですね。
あちこちで機械学習を使ったhogehogeが出ていますが成果はパッとしない印象を受けます。
それは何故なのかを考えたので書いてみます。

機械学習は得意不得意がある

機械学習はなんでも出来るわけじゃなくて得意分野があります。
というか機械学習って基本は線形分類器なので"分ける”は得意ですが何かを生み出すのは苦手です。
ここ数年はGANが流行っているのでそこらへんも進んでいますが技術的に高度ですね。
なので機械学習が得意な分野に沿って課題設定する必要があります。
この切り口をミスると解けなくて微妙な結果に終わります。

価値あるサービスを提供する意識がない

技術ファーストでサービスを作るとこうなります。
サービスは価値を届けるところが第一で、そのソリューションとして機械学習を使うのが正しい順番なはずです。
しかし世間では逆に「機械学習を使ってなにかやる」でスタートしているプロジェクトが多いように見えます。
顧客の何を解決するのかちゃんと考え抜く姿勢が必要です。
「エンジニアだから知ったこっちゃない」って姿勢が通用したのは昔の話で今は機械学習コモディティ化しているのでそんなんでは置いて行かれます。
技術を使って課題を解決する、これを技術側から考えることができるのがエンジニアの特権のはずです。
逆に企画側も「技術はわからんけどAIって付けたら売れるんだろ」みたいな姿勢もダメですね。
企画側もなるべく技術へ読み取る姿勢をもちましょう。

エンジニアとビジネスをつなぐ人材がいない

実はこれが一番重要なのかもしれないと最近感じています。
エンジニア側はビジネスが不明瞭、ビジネス側は技術が不明瞭。
この2種類の人間がそろっても間に大きな溝があるのが現状です。
機械学習で出来ることは今までの技術とくらべて違う発想が必要なため両方を理解する歩み寄ることが必要になっています。
機械学習だからこそできるビジネスを考えるためにはこの間を取り持つ誰かが必要です。
いわば人工知能プロダクトマネージャーが必要なのですが、しかしその人材は非常に少ないです。
機械学習を使ってプロダクトを作ったことのある人間が少ないので知見も足りていないからです。
この部分を担える人材は今後は価値が上がりそうですね。

まとめ

機械学習だからってなんでもかんでも上手くいくわけではありません。
銀の弾丸ではないということを肝に命じてちゃんとサービスを考えることが重要です。
そしてエンジニアとビジネス側がお互いに議論を尽くして考えることが大事だと感じています。
とはいえ、簡単なことではないのでアウトプットと改善を繰り返していくしか無いのかな、とも思います。
まだまだ機械学習の活用は始まったばかりなので失敗を重ねていきましょう!

Azure Machine Learningを使ってみたら思ったよりよかった

Grahamianです。 タイトルどおりです。

数年前からクラウド機械学習サービスがでてきていましたが、そのときは全然興味ありませんでした。
データサイエンスって前処理が面倒なんで機械学習だけクラウドで出来てもなーって感じ。
とか思っていたんですが、つい先日、ちょっとクラウド機械学習を調べてた思ったより良かった…舐めてた…
azure.microsoft.com

Summary

GoogleとかAmazonも触ったけどデータサイエンスという文脈なら、圧倒的にAzure最強でした。

どこが?

Azureのよいところはプログラミングできなくても大体の処理ができてしまうところ。
PythonとかRはプログラミング初心者でもわりと書きやすいのですが、それでも細かいところでハマります。
環境構築とか、ちょっとした記法のミスとか。
そこらへんがGUI上でサクサク作れてしまうのはいいですね。
やっぱりプログラマー以外にはCUIって結構ツライです。
Azureならブロックをつなげていくだけで基本的な処理ができてしまうので簡単。

分析の結果もVisualizationしてくれ分かりやすいです。
自動でいい感じにROC曲線とか決定木を書いてくれるのが最高。
前処理が面倒って話に隠れちゃいますが、実はこの後処理ってのも結構面倒です。
Azureなら自動でカッコいい絵にしてくれるので、このままレポート作れますね。
便利。最高。

とは言え、簡単な処理は出来るけど凝った処理になると途端に面倒になるサービスって多いんですよね。
おもちゃ的なサービスは取っ掛かりとしてはいいけど、やっぱり業務には使えなかったりして。
Azureはそこも考えられていてSQLPython、Rを書いて処理に使えるようです。
これが非常に便利そう。
内部にAnacondaを持ってるらしくて大体のことができる様子。
細かいとこはコード書けば処理できるし、基本はGUIで処理できる。
コードはブロック化できるので可読性高くできる点は非常に良いです。

GoogleとかAmazonは?

Google機械学習のリソースとして使う仮想マシンって感じです。
データサイエンスの文脈では使いにくいです。
機械学習をガッツリやるエンジニア向けですね。
Deep Learningとかガリガリやるならいいかも。

AmazonはAzureと同じで基本的な分析ができます。
AWSと連携できるので便利。
ウィザード形式で進み、予測したいデータの属性で勝手に分類器を選んでくれます。
ただ、これが非常に使いにくかったです。
慣れたら違うかもしれないけど自由度も低そうだし要らないかな?

ってことで

Azure Machine Learningはいいぞ。

pandasでiterrowsしようとしてハマった話

お早うございます。grahamianです。
タイトルどおりです。

DBからデータを取ってきてpandasのdataframeに入れてrowごとに処理するってことをやろうとしてました。
よくある処理だと思います。
で、最初は何も考えないで

for row in df:
   foo = bar(row['data'])

ってやろうとしたら動かないんですね。
ちょっと考えたら当たり前で、pandasは行列を扱っているので行か列を明示的に書いてやる必要があります。
そのために、iterrowsとiteritemsってメソッドがあります。
それぞれ行、列にイテレートするメソッドです。

それを調べた私は次のように書ききました

for row in df.iterrows():

で、とりあえずfooの中身を見るとrowが入ってるから「ヨシ」と思って作業をしてました。
しかし、どうも動作がおかしい。
なのでいろんなサイトを見ていて気がついたのが、同時にindexもfor文で回しているのです

for i, row in df.iterrows():

こうすることで思ったとおりに行の中身だけ取り出すことができました。
思わぬところでハマったのでメモ程度にここに書いておきます。
pandasはヘンなとこでハマるのでちゃんと勉強しないといけないなーと感じた事件でした。

自然言語処理技術の開発は検索方法を変えるのか?

こんにちは。Grahamianです。
今日は自然言語処理と検索方法について考えてみます。

www.itmedia.co.jp

chat botなんかが最近は話題になったりして人間vs機械の会話が注目されていますね。
いろんなサービスでchat botを使われるようになっています。
実際に使ってみると、それなりに上手くこっちの聞きたいことを理解してくれているように感じます。
ただ、やっぱり上手くいかないときの方が多いです。

たとえば、
「タイ料理じゃない安いお店がいいな」
って聞くと安いタイ料理のお店がでてきたります。
これは否定形を上手くとらえられていないんですね。
最近は↑くらいなら解釈できるようになってきましたが複雑になると途端に理解できなくなります。

chat botではキーワード抽出がメインになっているのでこのような状態になっています。
文脈とか構文解釈はとてもむずかしいんです。
RNNとか使ってやろうとしている人もいますが、やはり複雑な構文を理解することは難しいです。

さらに会話となると文脈というものが生まれます。
さっき言ったことを覚えているってのは結構難しいんです。
ここらへんはLSTMとか時系列データを扱うMLの発達ですね。

さて、chat botなど自然言語処理を用いた検索エンジンを触っていると普段の自分の検索方法の偏りを感じます。
みなさん大好きGoogleですが、Googleで検索するときはキーワードをスペースで区切って検索します。
この方法が一般的になっていて誰も疑問を思い浮かべずに慣れきってしまっていますね。
でも最初にGoogleで検索したときは誰もが「なんで文章で打ち込んだらダメなんだろう?」って感じたはずです。
今ままでは、技術的に難しく、キーワードを区切るという方法を持ち込んでいました。
しかし、技術の発達によって自然な文章で検索できるようになってきているんですね。
ところが、逆にGoogleの方式に慣れすぎていて「文章で検索とかダルいしやらないでしょ」とみんな感じています。
とても面白いですね。
本来不自然なUXなはずなのに慣れすぎて本来自然な方法が使いにくく感じてしまうわけです。

これからchat botが普及していったら逆にキーワードで区切る方法が廃れていくのでしょうか?
将来はキーワードで区切る方法はレガシィと呼ばれる時代がくるのかもしれません。

技術の発達がUXを変えていくのはとてもおもしろいです。
本当にこの世界は目が離せないですね。

ロボアドバイザーってどうよ?

おはようございます。
Grahamianです。

今日のニュースは↓
www.fina-sol.com

ここ2, 3年で金融業界に一気に人工知能技術、というか機械学習プロダクトが一気に増えました。
いわゆるFintechってやつですね。

金融は数字データが多いので機械学習と親和性が高いと言われています。
為替とか株価とか財務諸表は数字で示されますからね。
確かにインプットデータをいろいろいじってやらなきゃいけない画像や音声よりは楽そうです。

中でも投資先の与信診断や管理をする技術に関しては「カン」や「経験」に頼らずにデータドリブンでできるのは価値あると思います。
ただ、消費者向け商品はまだまだイケてない感じありますね。

最近だとロボアドバイザーが有名です。
↑の記事の他にもtheoとか。

投資では投資先のリスクとリターンのバランスが非常に重要です。
これは個人投資でも同じで、特に投資信託ETFを用いた長期投資で言われてます。
このバランスをどうするべきかは一般に金融工学を用いることで簡単に決めることができます。
ポートフォリオのリスク・リターン曲線とか言われているヤツです。
このリスク・リターン曲線上でリスクを取るか安全性を取るかってのは個人の好みです。

実際にリスクとリターンと安全性をどうとるかってのは結構悩みの種でして、年齢とか給与をもとに考えます。
ただ正解の無い問題なので難しいです。
これを、いくつかの質問をもとにリコメンドするのがロボアドバイザーです。
リコメンドしたバランスを保つように勝手にリバランスしてくれるようです。
リバランスとは金融商品を売買して指定のバランスになるようにする行為を指します。
要約すると長期投資する上で重要なことをやってくれるAI商品ってことです。

んで、この商品は2つ問題を抱えていると思います。
1つ目は「コストが高い」ってこと、2つ目は「人工知能関係無いやん」です。

1つ目のコストが高いってのは深刻な問題です。
投資、特に長期投資ではコストが非常に重要です。
勝ち負けが50%ならコストがあるだけ資産が目減りします。
長期投資ではリターンがある程度決まっているのでコストの影響は大きいのです。
Theoは信託報酬が1%です。
しかし、購入している商品を見ていくと信託報酬は概ね0.5〜0.2%です。
Theoで購入している商品は個人でも購入できるので自分で購入したら一気にコスト削減できます。
自分で買ったら0.5%だとしてTheoが1%ならコスト半減ですね。
自動でやってくれるにしてもちょっと高いかなあ、って思います。
この自動でやってくれることに価値を感じるのかもしれませんが、後述するとおり、わりといい感じに売買することは簡単です。

で2つ目の人工知能関係ないって話は、商品が良ければ別にいいんですが人工知能プロダクトを作ってる身としては気になります。
人工知能を使って投資」と聞くと「人工知能が勝手に儲けてくれる」と思いがちですが実際はそんなことありません。
購入している商品は一般に販売されている投資信託ETFですし、アクティブに売買して稼いでくれるわけじゃないんです。
それなりに投資の勉強をすれば上記のような金融工学的なアプローチは簡単に学べます。
効率的フロンティアに則って売買している個人投資家はかなり多いです。
というかここは金融工学の分野で定式化されていて、シミュレータもネット上にはたくさんあります。

また、どのリスクリターンと安全性の選択は人工知能を通すまでもなく一般的な指針があります。
ロボアドバイザーを使ってみた感じではほぼ指針どおりの答えを出してくれます。
なので、なんだか微妙だなあって感じ。
上述のとおりコストが高いのでそのコスト分の価値を感じません。


と、まあこんな感じで個人投資家としてある程度知識があるとあんまり恩恵を感じないのがロボアドバイザーです。
自動リバランスとかは助かるのですが年に数回しかないのを考えると時間削減にもなりませんし。
いい感じで買うにもちょっと学べばできてしまうので知識を購入している感覚もありません。

ただ、投資関係の知識がない人から見ると価値があるのかも、とは思います。
実際に、投資知識は無いけど投資してみたいって人はたくさんいるので。
(そういう人は投資しない方がいいと思うけど)
そうするとやはりコストが重要かなーと。
もっとコストが減ったら知識が無くてもそれなりの投資ができるので魅力的だと思います。
利用者が減ってスケールしたらコストも減っていくので今後に期待です。