🤖

AIとは結局なんなのか?

2022/10/05に公開

結論

他の方の記事の方が分かりやすかったです...

https://zenn.dev/nekoallergy/articles/ml-basic-nn01
この方の記事は初学者にとてもおすすめです!
https://zenn.dev/ryoatsuta/articles/aeae4990583ff6
https://zenn.dev/segavvy/articles/fd2b6aa03d31cf
https://aizine.ai/semi-supervised-learning0619/
それでも閲覧される方は以下にお進みください。

種類

  • AI(artificial intelligence)は人間の知能を模倣する技術
    • 機械学習
      • ニューラルネットワーク
        • ディープラーニング(現在最も有名、流行りであると言っても過言でない)

ニューラルネットワーク、ディープラーニングの概要

  • 人間の脳の神経回路を模倣している
    • 人間の脳の全てはまだ解明されていないので全く同じではない
  • パラメーターというものがある
    • 信号の伝わりやすさ、精度などに関連している
    • 数億という数あるので、人力では精度が良くなる組み合わせを探すことは不可能
  • 結局は大規模な関数である
    • 関数の性質を利用して学習をさせることができる
    • 数億というパラメーターをコンピューターに調整させることができるので、精度よくする組み合わせを探すことが現実的になった!

注意事項

  • 概念を解説します
    • 難しい数学などは省略
  • 基本的な分野について解説
  • AIについて何も知らない方向け

そもそもAIとは

AIはartificial intelligenceの略で、人工知能という名前で親しまれています。

AIは人間の知能を技術的に再現することを表しており、その中の一部として最近有名な「深層学習(ディープラーニング)」があります。

  • AI(artificial intelligence)は人間の知能を模倣する技術
    • 機械学習
      • ニューラルネットワーク
        • ディープラーニング(現在最も有名、流行りであると言っても過言でない)

上記が大体の階層です。機械学習は人間の知能を再現する一種で、その中にニューラルネットワークというものがあり、それがさらに発展してディープラーニングになっています。

ニューラルネットワークとは

ニューラルネットワークとは、人間の脳の神経回路を模倣したものです。ニューラルネットワークは、入力信号に対して出力信号を出します。

人間の脳はニューロンという神経回路が無数につながっており、それらが信号をやりとりして情報を処理するのですが、その神経伝達を簡略化して、数学的に計算したものです。

実際、ニューラルネットワークの中には大量の「パラメーター」というものが存在しており、高性能なモデルだと何億もの数があります。パラメーターというものは、ニューラルネットワークの神経の信号をどのようにやりとりするかを決める変数のようなもので、この値を変えることによってニューラルネットワークを学習させることができます。

そして、ニューラルネットワークは全体的にみると「関数」と呼ばれる構造になっています。関数であるおかげで、ニューラルネットワークが学習をしたり、結果を予測することができます。

ディープラーニングとは

ニューラルネットワークがさらに発展したものをディープラーニングと言います。違いとしては、

  • ニューラルネットワークに比べて複雑かつ大規模
    • ニューロン、パラメーターの数が多いなど

というようなイメージで良いかと思います。ニューラルネットワークというものは、小さな脳みそだと思ってももらって大丈夫です。それをもとに作った大きな脳がディープラーニングです。

AIの学習とは

ディープラーニングやニューラルネットワークの学習というのは、

「間違っている確率を下げる」

というものです。

たとえば、りんごとぶどうの画像のどちらかを見せて、間違っている確率(誤差)が80%であれば、全然学習できていないことがわかります。なので、基本的にはこの誤差を減らしていけば、正解確率(精度)が上がるわけです。

ただ、誤差がわかったとしても、その誤差の情報をもとにどうやって学習させれば良いのでしょうか。

そのキーワードが、「関数」です。関数というものは後ほど詳しく説明しますが、関数の性質を利用すると、

「誤差を最小にするにはどのようにパラメーターを変えれば良いか」

というのを機械的に求めることができます。つまり、ニューラルネットワークが関数であることは、

「人間とは比にならないほど高速で誤差を減らすパラメーターを、機械的に探すことが可能」

というメリットがあります。

関連ページ

https://www.chickensblog.com/scratch-neural-network-no-library/
https://www.chickensblog.com/colab-yolov5/
https://zenn.dev/teba_eleven/articles/aa46297ed1673b
https://zenn.dev/teba_eleven/articles/00a1eae31c5a6f

余談:参考になる解説ページをさがしていたら見つけた興味のある記事

https://zenn.dev/lotz/articles/14458f024674e14f4134
https://zenn.dev/fehde/articles/a2f3a94d4c47c2
https://zenn.dev/mory22k/articles/1a4fc1209a7287
https://zenn.dev/mory22k/articles/e3a51a259e590e
https://zenn.dev/nekoallergy/articles/sklearn-nn-mlpclf01

余談:関数についてふわふわ知っておく

ニューラルネットワークが関数というのを理解するためには、「関数」というものについて知っておく必要があります。と言っても、今回は難しい式や数学は使いません。

わかりやすいように、誰もが使ったことはある自販機を使って解説していきます。

※備忘録として記録しておきます
※分かりにくい&間違えている部分があるかもしれません
※基本読まないことを強く推奨します

自販機で関数をイメージする

たとえば、あなたが自販機でジュースを買うとしましょう。

  • ボタン(関数の入力とします)
    • りんごジュース
    • オレンジジュース
    • ぶどうジュース

※簡単にしたいので、値段などは考えません

これらのボタンがあり、普通の自販機と同じように、それらのボタンを押すとそのボタンに書かれたジュースが一つもらえるとしましょう。

  • 結果(関数の出力とします)
    • りんごジュースを押す→りんごジュースが一個手に入る

普通の自販機と同じですね。同じように、ぶどうジュースのボタンを押すとぶどうジュースが出てきます。

ここで重要なのが、

「一つの入力に対する出力は一つに決まっている」

ということです。

どういうことでしょうか。たとえば、オレンジジュースのボタンを押すとオレンジジュースが出てきます。複数回押したとしてもりんごジュースが出てくることはありません。

もし、オレンジジュースを押したときに、りんごジュースやぶどうジュースが同時に出てきたりしたらそれは自販機として成立しませんよね。その場合、関数と呼べない状態です。

つまり?

つまりは、
「何回入力をしても、何回も同じ出力をする」
というものが関数のイメージです。具体的な例は次で解説します。

簡単な式で関数をイメージする

たとえば、xという入力を2倍にしてその答えをyという出力で返す関数を考えてみましょう。

y=2 × x

式はこのように表せます。このxに、1を入れると、

y=2 * 1
となり、yは2のただ一つだけが決まります。何回1を入れても必ず同じ結果である2が帰ってきます。つまり関数と呼べます。

では、1以外の数字を入れてみましょう。
y=2 * 50

50を入れると、結果(y)は100になりました。何回xに50を入れても、100にしかなりません。たまに10が出てきたりすることはありません。これが重要です。これを関数とイメージしてください。

関数についてイメージできたが、これの何がいいのか?

先ほど、関数は一つの入力に対して一つの出力をすると解説しました。これのすごさは、

「関数であれば、入力に対する出力は一つに決まっている」
ので
「関数の結果は予測することができる」
ところです。

たとえば、

y=2 × x

という関数があります。先ほどはxの入力の値がわかり、yの値が分かりませんでした。今回は、逆にxの値がわからずyの値がわかる場合だったとしましょう。

この関数は、xについて求めると、

x=y / 2

と表すことができます。これで何ができるかというと、

「出力から入力の値を計算する」

ことができます。たとえば、yが100ならば、

x=100 / 2
x=50

となり、入力(x)の値は50であることがわかります。これは

「入力に対する出力は一つに決まっている」

という性質があるからこそです。

つまり、

「ニューラルネットワークは、入力信号に対して出力信号を出す」

ということから、ニューラルネットワークは関数であることがわかります。

P.S.

他の人が書いた記事の方がよっぽどいい。。
こういうコンテンツは自分に向いていないとわかっただけでも成長と捉えます。

Discussion