2020/05/30

「人工知能は人間を超えるか ディープラーニングの先にあるもの」の感想

「人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書) 」がとても良かったので、感想をメモ。
ラフなメモ書き。

たまたま古本屋で「人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書) 」を見つけて立ち読みした。
2015年出版なので、内容は古いだろう、と勝手に想像していたら、ディープラーニングや機械学習の概念の比喩や説明が非常に分かりやすくて、良い本だった。

興味を引いたフレーズ、理解した内容は下記の通り。

人工知能は、飛行機の例と近い。
人は飛ぶために鳥の真似をするような羽ばたく飛行機を作ろうとして失敗した。
実際は揚力という概念を見つけて、揚力を得る方法をエンジンによる推進力で実現することで、工学的に解決できた。
同様に、人工知能も、人の脳みそを真似したとしても、実装方法は生物と同じようにやる必要はない。
人工知能でも、知能の原理を見つけて、それをコンピュータで実現すればいいだけだ。

機械学習は所詮、力任せに探索手順を全て探すアルゴリズムに過ぎない。
ただし、人工知能ブームを経ていくつかの成長がある。
一つは、膨大なデータを元に機械学習をさせると、より良い特徴量が発見できてきたこと。
たとえば、将棋ソフトの特徴量では、以前は2つの駒の関係だったが、3つの駒の関係を使った方が有効だと分かってきた。

2つ目は、スコア評価にモンテカルロ法を導入して、ある局面まで来たら、人間が重み付けで評価するのではなく、ランダムに数億手を探索させてスコアを評価させる。その中から良いスコアの探索手順を選ばせる方が精度が高い。
コンピュータによるシミュレーションで膨大に計算できるのだから容易いこと。

ニューロンの誤差逆伝播のたとえ。
ある組織の上司が判断を下す場面で、部下からの情報を元に判断を下す。
自分の判断が正しかった時、その判断の根拠となった情報を吸い上げた部下との関係を深めて、判断が間違った時はその間違いの原因となった情報を吸い上げた部下との関係を弱める。
これを何度も繰り返せば、組織として正しい判断を下す確率が上がる。
つまり、正しい判断材料が部下(下)から上司(上)へ上がる一方、修正を加える時は、上司(上)の判断の誤り(誤差)から部下(下)との関係の強さに修正を加えるので、誤差は逆伝播するわけ。

しかし、上司と部下の距離が遠すぎると、誤差逆伝播による修正の情報は届きにくくなる。
この比喩は、ニューラルネットワークの誤差逆伝播は、組織の情報伝達と似ていて非常にわかりやすい。

機械学習は、ニューラルネットワークを作る学習フェーズと、できあがったニューラルネットワークを使って正解を出す予測フェーズに分かれる。
学習フェーズの作業はとても時間がかかる一方、いったんニューラルネットワークが完成すれば、予測フェーズは一瞬で終わる。
たとえば、人間も学習している時は体得するのに非常に時間がかかるが、学習した成果を使って判断するのは一瞬だ。
それと事象は似ている。

機械学習の手法はいくらでもあるが、結局、いい特徴量を作るのが一番大変で、人間がやるしかないんですけどね、と先生から言われた。
つまり、特徴量をどうやって作るかが機械学習の本質である。
人間は特徴量をつかむのに長けている。

特徴量の話は、言語哲学者ソシュールの議論に似ている。
彼は、記号とは、概念(シニフィエ)と名前(シニフィアン)が表裏一体となって結びついたもの、と考えた。
たとえば、シニフィエは猫そのものであり、シニフィアンは日本語は「猫」、英語は「Cat」と呼ばれて、人はそれぞれ理解して運用されている。

コンピュータが特徴量を取り出したら、それは概念(シニフィエ)であり、そこに記号として名前(シニフィアン)を与えれば良い。
そうすれば、シンボルグラウンディング問題は解決される。
Googleがディープラーニングによって膨大な画像データから、猫の顔や人間の顔を判別できた、というのはそういうこと。

ディープラーニングは多階層ニューラルネットワークである、という意味が分かっていなかったが、ようやく分かった気がした。

ディープラーニングとは、特徴表現学習と呼ぶべきだ。

ニューラルネットワークで、3層からどんどん多層にすれば人間の脳みそに近づくのに、精度が上がらなかった。
原因は、深い層では、誤差逆伝播が下の階層まで届かないから。
つまり、組織の階層が深いと、一番上の上司の判断が良かったか悪かったかどうかが、末端の従業員に届く頃には、ほとんど影響がゼロになってしまうから。

ではディープラーニングではどうやって解決したのか?
ディープラーニングが従来の機械学習と大きく異なる点は2つ。
一つは、1階層ずつ学習すること、もう一つは自己符号化器という情報圧縮器を使うこと。

自己符号化器では、ニューラルネットワークの入力値と出力値を同じにする。
つまり最初は教師あり学習をさせる。
隠れ層は細くくびれているので、情報量を圧縮させて復元エラーが出ないような特徴表現を学習させる。

統計に詳しい人であればピンとくるだろうが、自己符号化器でやっていることは、アンケート分析結果でおなじみの主成分分析と同じ。
たくさんの変数を少数個の無相関な合成変数に縮約する方法。
実際、線形な重みの関数を用いて、最小二乗誤差を復元エラーの関数とすれば、主成分分析と一致する。
自己符号化器では、非線形な重み関数(シグモイド関数とか色々)を使い、復元エラーを最小にさせるだけでなく、様々な形でノイズを与えて非常に頑健に主成分を取り出す。
これにより、多階層にディープにでき、主成分分析では取り出せないような高次の特徴量を取り出せる。

「ディープにする」図23が非常にわかりやすい。
隠れ層を上に引っ張り出し、入力層と出力層は同じだから便宜的に重ねてしまい、隠れ層を2段目、3段目、と何段にも重ねればよい。

相関のあるものをひとまとまりにすることで特徴量を取り出し、さらにそれを用いて、高次の特徴量を取り出す。
人間がぼーっと目や耳から入った情報から、「お母さん」の概念を発見する仕組みも同様に実現できるはず。

なお、データから概念を作り出すというのは、本来、教師なし学習である。
ディープラーニングでは、教師なし学習を教師あり学習的なアプローチでやっている。

ところが少し難しい点は、そうして得られた特徴量を使って最後に分類する時、教師あり学習になることだ。
つまり、ディープラーニングは「教師あり学習的な方法による教師なし学習」で特徴量を作り、最後に何かを分類させたい時、「教師あり学習」になる。
では、ディープラーニングは教師あり学習をやっているなら、ディープラーニングの意義は小さいのではないか?
(ここは、僕にとっては一番難しい所)

だがこの違いは非常に大きい。
ディープラーニングによって得られた特徴量を使ってデータを判断する時の教師あり学習は、非常に高度なレベルなのだ。
「世の中の相関する事象」の相関をあらかじめとらえておく(つまり、特徴量で抑えておく)ことで、現実的な問題の学習は早くなる。
なぜなら、相関があるということは、その背景に何らかの現実の構造が隠れているはずだから。
つまり、世の中の2つの事象の関係に強い相関関係があるならば、その背後には、概念や意味のレベルで何かしら同一な概念が含まれているはずだから。

ディープラーニングは所詮、主成分分析を非線形にし、多段にしただけ。
とても単純な理屈。
しかし、考え方は単純であっても、こうした高次の特徴量や概念を取り出すには、非常に長時間の精錬の過程を必要とする。
つまり、特徴量の頑健性(ロバスト性)が必要。
すなわち、入力にノイズが多少あっても、ニューラルネットワークの特徴量による判断がぐらつかないレベルの頑健性が必要。

頑健性を得るには、ニューラルネットワークに過酷な環境を与えて、いじめ抜かないと、データの背後にある本質的な特徴量を獲得できないのだ。
画像認識の精度が上がらなかったのは、頑健性を高めるためにいじめ抜く作業の重要性(正則性)に気づかなかった為、そもそもマシンパワーが不足していた為だ。
それさえ気づけば、単純明快な話に過ぎない。

人工知能は本能を持つのか?
本能とは、快や不快を感じるかということ。
人間が獲得する概念の中には、復元エラーを最小化するだけでなく、何が快か不快かによって方向づけられてるものが多い。
ゲームや漫画、スポーツ、音楽など。
こうしたことは、人工知能では「強化学習」として知られている。
報酬を与えることで行動を方向づけて、その結果を生み出した行動を強化される仕組み。
強化学習で重要なのは、何が報酬になるのか、何が快や不快の基準になるのか?
人間は、生存に有利な行動が快、生存の確率を低くする行動は不快になる。
こうした本能に直結する概念をコンピュータが獲得するのは難しい。

この部分は、強化学習は今ホットな話題の一つ。
DeepMindのAlphaGoが以後の世界チャンピオンを破ったのは、強化学習にディープラーニングを取り入れたから。
たぶん、今後色々解決されていくはず。

強化学習の話は、昔習った教育学の話に似ている感じがする。
快や不快の基準は、マズローの欲求段階説における生存レベル、安全レベルの人間にとても当てはまるだろう。
つまり、貧しい人達の行動は、経済学の合理的人間説、強化学習のアルゴリズムにとても近い。
一方、低次の欲求が満たされて高次元レベルの人間になると、生存や金銭に関係なく、より複雑な行動を取るようになる。


| | コメント (0)

2020/05/29

オンラインサービスmiroとastahを連携するastah-miro plugin

オンラインサービスmiroとastahを連携するastah-miro pluginのリンクをメモ。

【参考】
astah-miro pluginを作ってみました | astah in 5 min

Miro | Free Online Collaborative Whiteboard Platform

便利なオンラインホワイトボードサービスmiro(ミロ)の使い方の基本

便利過ぎる!オンラインホワイトボード miroを使ってmiro!|あしたのチーム デザイン事業部|note

デジタルホワイトボード「Miro」が目指すコロナ時代の「ニュー・ノーマル」な会議 ? BRIDGE(ブリッジ)

【miro】コロナ時代の神ツール!リモートチームを一つにするオンラインホワイトボード「miro(ミロ)」 | MAPLOG|ビジネス思考を整理するためのマインドマップ活用ブログ

以前、坂根さんから、miroがお勧めですよ、と教わったが、その意味が正直分かっていなかった。
おそるおそる触ってみたら、無限大のホワイトボードみたいなイメージで使いやすそうな感触がした。

astah-miro pluginでは、astahのクラス図とマインドマップをmiroと相互連携してくれるみたい。
このツールがあれば、ホワイトボードでラフな設計を書いた後、astahに取り込んで、モデリングを深化させていくことができる。
一方、自分で考えたastahのモデルをmiroに連携することで、ホワイトボードに書き出せるので、皆で議論するのが便利。

試してみたいと思う。

| | コメント (0)

2020/05/28

ツールを使いこなせる事の重要性が増している

直近2ヶ月のコロ助を経験して、ツールを使いこなせる事の重要性が増している事を感じた。
ラフなメモ。

たとえば、学校の理科の先生がタブレットを使って花壇の花を撮影しようとしたが、写真の撮り方が分からなかった、というニュースが流れていた。
たとえば、塾なども、ほとんどがオンライン授業になっている。

たとえば、スーパーもレジはナイロン幕を張るだけでなく、店員は、客が渡すお金すら、できるだけ触らずにトレイからレジマシンに放り込んでそのまま渡したり、会員カードもバーコードを読み取るだけで手に触れないようにしている。
できるだけキャッシュレスにしようとしている。
たとえば、再開した図書館も、職員は図書館カードをトレイで受け渡しするだけでなく、手袋までしてる。

たとえば、銀行のATMに行って、現金を出して財布に入れることすら、コロナ感染のリスクがある。
銀行振込や引き出しは、オンラインバンキングサービスやモバイルサービスでやるのを銀行自身が推奨している。

たとえば、ほとんどの飲食店や居酒屋は、玄関に「テイクアウト始めました」の看板を出している。
宣言解除前まで、客は居酒屋に入れなかった。

たとえば、IT勉強会やコミュニティ活動は、すべてオンライン配信となり、Zoomで講演を流したり、お互いに議論するのが普通になった。
もちろん、仕事はテレワークとなり、出勤せずに自宅で仕事して、GoogleサービスやSlack、Zoomを使うのが普通になった。

そんな風景が突然現れた。
すると、オンラインでやり取りできるツールに慣れていないと、仕事はおろか、生活することすら不便になった。

スーパーなどの日常の買い物は基本はPayPayやクレジットカード支払い。
飲食店のテイクアウトはスマホで予約して、UberEatで配達してもらう。

勉強会やコミュニティでは、Zoomでやり取りするので、もちろんフレッツ光などの高速な回線がないとやってられない。
仕事もオンラインでやり取りするので、会社ノートPCのセキュリティ担保はもちろん、SSL-VPNを張った時に会社のオンプレサーバーに負荷がかかっても困る。
自宅では、自分も仕事するし、子供もオンライン授業を受けていれば、フレッツ光でも通信速度は落ちてしまい、正直仕事しづらい時もある。
もちろん、子供はPCの操作が分かっている必要があるし、オンライン授業を見ながら自分の理解を深めていくように、自分の学習方法も変えていかないといけない。
先生もタブレットが使えるのは当然出し、自分の授業をオンラインで配信できるように、授業を組み立てて、Zoomも使いこなせる必要がある。

そんな状況を踏まえると、Zoomのようなビデオ会議ツールを使いこなせるだけでなく、キャッシュレスで生活できるようにネットバンキングやPayPayやクレジットカードを使いこなせること、もっと根本的に、スマホでテイクアウトの宅配サービスを受け取れるように使いこなすことが必要とされてきている。

けれど、そういう状況に皆が馴染めたのか、と言われるとそうでもないと思う。
80歳の親を見れば、未だに銀行ATMから現金を引き出し、スーパーでは現金払いだし、スマホをあげても使いこなせない。
何せ老眼なのでスマホは小さくて見にくい。
世の中の情報はテレビや新聞だけから収集している。
スマホからWebを見たり、Youtubeで好きな動画を見たり、SNSから最新の情報を収集することはしていない。
そういう生き方もあるだろうし、今の時代は弱者でも生活できるようになっているので問題はないのだろう。

さすがに年をとって80歳を過ぎれば、過去の人生経験がありすぎて、今までの経験を捨てて新しいツールを使って、新しい環境に馴染むのは辛いかも知れない。
でも、より主体的に生きていくには、新しいツールを使いこなせなければ、欲しいサービスが得られないし、欲しい情報も取得できないし、色んな人達と出会いを求めることができない。

コロ助の影響のため、80歳の親が楽しみにしていたコーラス教室や漢詩教室は無機延期となり、お隣さんとのやり取りも劇的に減った。
実際に会って話ができる人達は、自宅にいる家族だけ。
たぶん寂しいと思う。

僕も2ヶ月以上、都心部に出てないからリアルに対面で会った知人はいない。
でも、ほぼ毎日、SNSやZoomなどでやり取りしているから、人間関係が劇的に減ったという感覚はない。
人間関係がオフラインからオンラインに変わっただけ、みたいなイメージがある。

そんな経験をふりかえると、新しい環境では、新しいツールを使いこなすことで、以前と同じサービスやコミュニケーションを維持できるんだな、と改めて感じた。
最初は抵抗感もあったけれど、それは生きていくために必要なのだ、と。

「強い者が生き残るのではなく、環境に素早く適応した者が生き残る」という言葉を、今ほど体で経験したことはなかったと思う。

| | コメント (0)

次元の呪い

機械学習に出てくる「次元の呪い」をリンクしておく。

機械学習と次元の呪い | TechCrowd

(引用開始)
次元の呪いとは
大量のデータを分析する時は大きな次元のデータの処理をする事が多くなりますが、次元数が大きくなると次元の呪いと呼ばれる問題が発生する事に注意しなくてはなりません。
次元の呪いとは、データの次元数が大きくなり過ぎると、そのデータで表現できる組み合わせが飛躍的に多くなってしまい、その結果、手元にある有限なサンプルデータでは十分な学習結果が得られなくなることを指しています。
ビッグデータを処理するためのコンピュータシステムを用意している場合でも、機械学習でデータを処理する場に、次元の呪いに注意しないと、計算コストが莫大となるだけでなく、十分な学習結果が得られず、未知のデータに適切に対応出来なくなる等の不具合が発生してしまいます。
(引用終了)

次元の呪いについて - Qiita

(引用開始)
超球をメロンパンに例えています。高次元空間においては、「皮」に相当する部分が体積の殆どを占めるようです。
3次元では皮の体積が3%であるのに対し、500次元では99.3%が皮になります。とても不思議です。
(引用終了)

高次元空間では、任意の相異なる点同士の距離はかなり疎になる。
つまり、高次元空間では、皮に相当する部分にデータが集まっている。
距離が離れると、予測の信頼性は大幅に下がってしまう。
訓練データの次元が多いほど、過学習のリスクが高くなる。
だから、次元削減のための手法がいくつか生み出されているストーリーらしい。

人間は3次元までしか認識できないので、1000次元空間の中の200次元曲線なんてイメージできない。
絵も書けないから、数式からそのイメージを沸かせるしかない。


| | コメント (0)

2020/05/27

Python と R の違いのリンク

PythonとR言語の違いについて興味を持ったのでメモ。

【参考1】
Python と R の違い・関数の対応表 ? Python でデータサイエンス

基本ライブラリやデータ分析に関する処理の違いをコードベースで書いてくれているので読みやすい。

Python と R の違い (データフレーム編)
Python と R の違い (数学関数・データ整形加工編)
Python と R の違い (日付・時間の処理)
Python と R の違い (データ可視化・グラフ作成編)
Python と R の違い (決定木分析)
Python と R の違い (サポートベクターマシン)
Python と R の違い (ナイーブベイズ分類器)
Python と R の違い (ランダムフォレスト法)
Python と R の違い (線形回帰による予測)
Python と R の違い (k-NN 法による分類器)

PythonとR言語のコードを比較しながら読んでいると、まるで、ロゼッタストーンを発見した時に、古代エジプト語とアルファベットを比較したような感覚に似ているのかな、と空想したりする。
つまり、同じ内容を表現する時に、全く違う言語で表現したら、見た目が全く違う、みたいな感じ。

【参考2】
PythonとRのコマンド比較表 - Qiita

データフレーム、プロット、リスト、計算、処理などの観点でコード比較している。
Numpy、Pandas、Matplotlibに相当するRのライブラリは自分でも整理してみる。

【参考3】
R vs Python:データ解析を比較 | POSTD

実際にデータ分析したいことについて、PythonとRで比較している。
Pythonは、scikit-learnみたいにライブラリを使いまくるイメージかな。

一方、Rの方がPythonよりも行数を短く書ける場合もあるみたい。
この辺りは、自分で書いてみて理解する。

Haruhiko OkumuraさんはTwitterを使っています 「https://t.co/fxE6ETowKd Rで書けば5行だ df = read.csv('...') plot(df$costs, df$profit) r = lm(profit ~ costs, data=df) summary(r) abline(r)」 / Twitter

【参考4】
「データ分析をやるならRとPythonのどちらを使うべき?」への個人的な回答 - 渋谷駅前で働くデータサイエンティストのブログ

このブログを読むと、試行錯誤しながらデータ分析するならR言語、機械学習や深層学習ならPython、という使い分けなのかな。

ちょっとずつ書いてみると違いが分かり始めて面白い。


| | コメント (0)

«「クライアント-ベンダーアンチパターン」という根本問題