見出し画像

昨今の機械学習(AI)ブームの今、書き残しておきたい基本的なこと

今巷で、ChatGPTが話題をかっさらっている中、

  • 機械学習(AI)って、そもそもこういうものだったよね

    • だからこそ、こういう距離感で接していきたいよね

  • 機械学習(AI)って、こうやって身近に触れられるものだよね

といったことを、今のうちに荒く書き起こしておきます。

はて、機械学習(AI)とは?

機械学習の歴史は古く、1960年代ぐらいには始まっていたとされています。
サポートベクターマシン(SVM)とか、回帰分析とか、さまざまな手法があります。

その中で、近年代表的な手法が、「ディープラーニング」。

ディープラーニングのイメージ図

ざっくりとしか言いません。ざっくり言うと、人の脳細胞のような複雑なニューラルネットワークを用意し、そこにデータを入力することで、
その文章や画像の傾向・特徴に沿った経路が形成されていきます。

この形成(=学習)には、教師データ(正解があるデータ)を何百回・何万回と流し込むことで、
経路中の進むべき向き先が更新されていき、精度が上がっていきます。
(ノードAにいたら、次はノードBへ進むのではなく、ノードCに進むパターンの方が多いから、そう進むようにしておこう、などの働きがガシガシと行われる)

また、文章・動画像・音声など全てのメディアは数値データですから、
(例えば画像なら、1ピクセルは0〜255の数値)
大量の数値データのかたまりを淡々と入力していくイメージ。

そうすることで、動物の画像をひたすら入力させまくった学習済み回路に、
イヌの画像を流し込んでみると、その画像の特徴から、過去の傾向的に「イヌっぽい」と、結果が導き出されるわけです。

結局は「確率のかたまり」でしかない

おさえておきたい事としては、
機械学習は、「人の頭脳のように、意味や文法などを理解しているわけではない。」ということ。

例えば、ここに1個の英文があります。

I climbed Mt.Fuji today.  So, I was very ○○○!

「今日富士山に登った。だからとても○○○!」
流れ的に、「tired(疲れた)」だと予想できますよね。

大量の日常会話文をひたすら流し込んだ機械学習(AI)なら、代わりに簡単に導き出してくれるでしょう。

ただ、この時、機械学習(AI)としては、
「tired(疲れた)」が来ることを予想できるのは、「富士山に登ったのなら、そりゃね」と意味を理解しているわけもなく、

過去の確率上、I was ときたら次は、coolが80%、freeが75%、tiredが60%・・と、候補を持ち、
その中でも、前段の climb との相関性も加味すると、tiredが90%だ!

と言う具合に、単語同士の相関性(関係がある確率)をベースに導き出しているだけでしょう。

また、I was と来れば、文法的にSVCの形だから、形容詞がきそうだね、とも考えておらず、
過去の膨大に流した例文データ上、ただそうなっていたから、候補に形容詞が多く控えていたのでしょう。別に文法を理解しているというわけでもなさそう。

彼らは、「確率的に、こう来たら次はこう」という膨大な確率データの塊で戦っているのです。
残念ながら、意志や感情は無いし、「僕の言葉を理解してくれている、君ならわかってくれてるよね」という希望を持つのは、お互いの幸せのために良くないはずです。。

でもやっぱり垣間見える凄さ

しかし、前段の例では、もちろんあらかじめ人海戦術で
「climbの関連単語は、tiredだよ、highだよ」と1つ1つ教え込んでいるわけでもなく、
「1つ前の文のこのあたりの単語に着目して!」と指示しなくても良いのです。

いろんな着目点や、注目パターンがありそうなものですが、
過去に流した膨大な例文データから、
「climbとtiredは相関関係がある。」ということを自然と見つけ出せていることに驚きを隠せないわけです。

別のありそうな例で想像してみると、
防犯カメラで不審人物を捉えたら検知できるようにしたい、というざっくりオーダーを叶えるべく、
大量に過去の不審人物が映り込んだ画像をひたすら流し込んでみたら、
何にも教えてないのに、プログラムの中で「不審人物は、黒い服を着ていることが多い」などという法則性が勝手に出来上がっているかもしれません。

強み・弱み

ここまでお送りしてきた点から、
人が気づけなかった単語同士・画像内の特徴さえも見つけ出して、期待以上の判定結果を出してくれる可能性があると言えるでしょう。

ただ、あくまでも過去の確率・傾向をもとにしていることから、
学習させたこととは程遠い、何か全く新しい思想やアイディアが出てくることはあまり期待しない方が良いのではないかと。。

ChatGPTで言えば、世界中のさまざななネットの情報が流し込まれているので、自分が知らなかったことをはじめ、「これとこれの組み合わせ」レベルの真新しい提案も、湯水のごとく湧き上がってくるでしょうが、
「全くこの世に無いもの」をゼロから生み出すのは難しいのだと僕は思います。

機械学習は、簡単に試せる・触れられる

ChatGPTと会話して、凄さを体験するのは、もちろん簡単なのですが、
なんか機械学習で実験してみたい、ちょっと作ってみたい、という方もいるのではないでしょうか。
とっつきにくそうですが、意外と簡単に触れたり試せる環境は整っています。

機械学習(ディープラーニング)の核となるライブラリは、大体がPythonで提供されているので、ネットの参考記事・コードはPythonで書かれたものが溢れています。

<核となるライブラリ>

  • Pytorch

  • Tensorflow(Google)

  • nuerolab

など。

Pythonよくわからないんだよな、という方でも、まずは面白そうな実装記事を見つけて、コードをコピペして、回してみる。というのは、ことはじめとしていかがでしょうか。
(簡単にコードを回せる環境については、後述)

ネットをググって、「パンダとパトカーの判別器を機械学習で作った」などの記事を見て、なんか面白そうだから自分でも回してみる、
で、「自分だったらもっとこういう画像を流し込んでみたいけどな」という発想が生まれたら、やってみる。なんだかワクワクしてきそうですね。

無料で簡単にPythonを回せる環境

すでにご存知かもしれませんが、こういったものがあります。

Google Colaboratory

https://colab.research.google.com/?hl=ja

Google上で、PythonのWebエディタ&実行環境が提供されています。
ブロック状のエディタになっていて、好きに区切って書いて、好きな順番で実行ボタンを押して回せます。

Google Colaboratory

コードを実行すると、GCP(Google Cloud Platform)上の空きサーバが自動的にアサインされて、インフラを特に意識することがありません。
しかも、無料です。
※ 無料版の場合、アサインされるサーバーのメモリ12GBが最大で、それ以上リソースを食う学習はできないので、あくまでもライトに気になったアルゴリズム・機械学習を動かしてみよう、という場合に最適なのではないでしょうか。

その他制約

アサインされたサーバーはずっと自分のためにいてくれるわけではありません。。
有効期限(数時間?)が切れたら、再度また別の空きサーバがアサインされ、今までやってきた作業がまた1から始めないといけなくなってしまいます。

そのため、学習済みの状態データ(チェックポイントデータとよく呼びます)を吐き出させ、Googleドライブに避難させておいて、
次回別のサーバで読み込んで、続きから作業・学習を行う、というテクニックは駆使していきたいところ。

機械学習回してみた① 手書きデータのOCR

僕も久々なにか回してみようと思い、やってみました。
こちらを参考にさせていただきました。

OCRをpythonで自作する方法【機械学習】

ざっくり言うと、「abcd」と手書きで書いた画像を読み込ませて、
「abcd」だね、と文字列に起こしてくれるのを目指したものです。

「これはaだよ、これはbだよ」と正解付きの何万枚もの手書きデータ(教師データ)も用意してくださっているので、学習が捗ります。

そして、学習させて、上図の手書き「abcd」を読み込ませて、判定してもらった結果、、、

全然ダメじゃん・・・

多分ですが、学習回数(エポック)が全く足りていないのでしょうね。。
やってみるとわかるのですが、機械学習は指揮者の結構な地道な努力が必要です。
学習回数を変えてみたり、教師データを変えてみたり、ある程度の精度を出すためのチューニングは1日にして成らず・・。

機械学習回してみた②  翻訳(?!)

ChatGPTのように、こんなに学習させれば、こんな素晴らしい未来があるんだね、と言う例をば。

Facebook社がGithubで公開している、こんな言語モデルがあります。
「fairseq」

その中の派生の一つとして、「M2M-1000」というプログラムがあります。
日英だけでなく、20カ国間の翻訳を可能とするモデルという、驚愕の内容。

しかも、さらに驚くことに、
世界中の何千万・何億件というサイトをクロールして、流し込み、学習させて作った確率モデルのチェックポイントファイルも公開されているため、
実行さえできれば、すぐに実力を体感できてしまうのです。
(といいつつ、ドキュメントがあまり整備されていないため、動かすまでが結構大変でした。。)

また、このチェックポイントファイルは容量が12GBもあり、メモリ16〜32GBが載ったサーバーでないと実行は難しいでしょう。
(そのため、Google Colaboratory上での実行は断念。大人しく僕のMacBook上でギリギリ実行。)

こちらが入力文。

これを流し込んでみると・・・

翻訳されている・・!控えめに言って、素晴らしい。

学習済みデータ(チェックポイントファイル)って、言わば資産ですよね。
それが公開されているとは・・・。
※ 普通にGoogle翻訳使えば?というツッコミはここでは無しでお願いします。。もう自分自身で10回以上ツッコんでいます。

まとめ

  • 機械学習(AI)は、今のところ、感情を持ったり人間の思考を理解していない。あくまで確率論。それも膨大な確率データを持ってしての確率論。

  • 膨大な教師データ(正解があるデータ)と、学習に掛かる労力・時間さえ工面することができれば、ちょっとした業務支援ツール程度なら誰でも見えてくるでしょう。

  • ただ、精度を上げるためには、色々な苦労が予想されます。(本当に1日にして成らず)

  • あとは、アイディアこそが最も重要。何を判別させたいのか、何を提案させたいのか、結局はそこ次第で、ゴミにも宝にもなる。

以上でございます。

この記事が参加している募集

やってみた

AIとやってみた

この記事が気に入ったらサポートをしてみませんか?