見出し画像

AIエンジニアの冒険:XORゲートと多層パーセプトロンの謎に迫る!


はじめに:パーセプトロンの次なるステップへ

こんにちは〜!🙌
前回の記事でパーセプトロンの基本を学んだ皆さん、今回はさらに一歩進んで、より面白い話題にチャレンジしてみましょう!🚀

今回のテーマは「XORゲート」と「多層パーセプトロン」。
これを知ることで、AIがどのように複雑な問題を解決しているのか、その秘密に迫っていきます。

また、パーセプトロンにまつわるちょっと面白い知識もお届けします。
実は、パーセプトロンを駆使すると、パソコンが作れちゃうかも…!?
ということで、今回も初心者でも楽しく学べる内容をお届けしますので、ぜひ最後までお付き合いください!📚


XORゲートとは?— シンプルだけど侮れない

まずはXORゲートについて
XOR(エクスクルーシブ・オア)ゲートは、次のような論理ゲートです:

  • XORゲート:二つの入力が異なる場合に「1」を出力し、同じ場合には「0」を出力します。例えば、0と1、または1と0が入力されると出力は1になりますが、0と0、または1と1だと出力は0になります。

ここで、前回学んだANDやORゲートと比べると、XORゲートの動作が少しだけ複雑になっていることに気づくかもしれません。実は、このXORゲートをパーセプトロン一つで表現するのは難しいのです。
どうしてかというと、単純なパーセプトロンでは線形的な境界しか引けないからなんですね。

下記のように、
パーセプトロンは直線的でシンプルな曲線を基軸に切り分けるのに対し、
XORは曲線を描き、非線形てきな形を描くことからパーセプトロンには表現できないものを表現できる。

多層パーセプトロン(MLP)
— 複雑な問題を解決する鍵🗝

そこで登場するのが「多層パーセプトロン(MLP)」です。
一層のパーセプトロンではシンプルな線形型の表現であったところが、多層型になることで柔軟性を持ち合わせることができるアルゴリズムです。
名前からして少し難しそうに感じるかもしれませんが、基本的な考え方はシンプルです。

多層パーセプトロンは、複数のパーセプトロンを層状に組み合わせたものです。具体的には、次のような構成になります:

  • 入力層:データが最初に入る場所

  • 隠れ層(Hidden Layer):中間処理を行う層

  • 出力層:最終的な判断を下す層

この「隠れ層」があることで、XORゲートのような複雑な論理を表現できるようになるのです。隠れ層を増やすことで、より複雑な問題を解決できるようになるというのが、この多層パーセプトロンの大きな強みです。
AIの多くが、この多層パーセプトロンの考え方を基にして発展してきました。

パーセプトロンの面白ナレッジ
— NANDゲートでパソコンを作る!?💻

さて、ここで少し面白い話をしましょう。前回の記事でNANDゲートについて紹介しましたが、実はこのNANDゲート、組み合わせ次第ではとんでもない力を発揮します。
何と、NANDゲートだけでパソコンを作ることができるのです!

これはどういうことかというと、NANDゲートを巧みに組み合わせることで、あらゆる論理ゲートを再現できるということです。

例えば、ANDゲートやORゲートもNANDゲートを使って構築することができます。そして、これらの論理ゲートが集まることで、コンピュータが計算を行う基本的な仕組みが作られています。

つまり、パソコンの中で行われている複雑な計算も、元をたどればNANDゲートの組み合わせに過ぎないんです。この知識を頭に入れておくと、AIやコンピュータの世界がより楽しく見えてくるかもしれませんね!

Pythonで多層パーセプトロンを実装してみよう!

では、実際にPythonを使って多層パーセプトロンを実装してみましょう👩‍🏫
今回の目標は、XORゲートを学習するAIを作ることです。

import numpy as np  # 数値計算ライブラリNumPyをインポート

# シグモイド関数の定義
# これは、ニューラルネットワークでよく使われる活性化関数で、入力を0と1の間に収めます
def sigmoid(x):
    return 1 / (1 + np.exp(-x))  # シグモイド関数の式

# シンプルな2層パーセプトロンの定義
# XORゲートを学習するためのモデルを定義します
def XOR(x1, x2):
    # 隠れ層の重みとバイアスを設定
    # 重みは各入力に対してどれだけ重要かを決める係数、バイアスは結果を調整する定数です
    w_hidden = np.array([[0.5, 0.5], [-0.5, -0.5]])
    b_hidden = np.array([-0.2, 0.2])
    
    # 出力層の重みとバイアスを設定
    w_output = np.array([0.7, 0.7])
    b_output = -0.1
    
    # 隠れ層の計算
    # 入力(x1, x2)と隠れ層の重みを掛け合わせてバイアスを足し、その結果をシグモイド関数に通します
    # これで、隠れ層の出力が得られます
    hidden_output = sigmoid(np.dot(np.array([x1, x2]), w_hidden) + b_hidden)
    
    # 出力層の計算
    # 隠れ層の出力と出力層の重みを掛け合わせてバイアスを足し、再びシグモイド関数に通します
    # これで、最終的な出力が得られます
    output = sigmoid(np.dot(hidden_output, w_output) + b_output)
    
    # 出力を0か1に変換
    # 出力が0.5以上なら1、それ未満なら0とします
    return 1 if output > 0.5 else 0

# XORゲートの動作をテスト
# 各入力組み合わせに対して、正しい結果が出るかを確認します
print(XOR(0, 0))  # 期待出力: 0
print(XOR(1, 0))  # 期待出力: 1
print(XOR(0, 1))  # 期待出力: 1
print(XOR(1, 1))  # 期待出力: 0

このコードでは、2つの入力を持つXORゲートをシンプルな2層のパーセプトロンで実現しています。隠れ層を追加することで、前回学んだ単層パーセプトロンではできなかったXORゲートの実装が可能になりました。

実際にコードを実行してみると、XORゲートが期待通りの結果を出力するのが確認できると思います。これが、多層パーセプトロンの力です!


最後のまとめ

いかがでしたか?今回の内容で、パーセプトロンの応用編として「XORゲート」と「多層パーセプトロン」について学びました。
さらに、NANDゲートの面白さについても触れましたが、これを知ることで、AIの仕組みがより一層面白く見えてくるのではないでしょうか?😎

次回は、今回学んだ多層パーセプトロンの応用編として、AIがさらに高度なことをできるようになる仕組みについて探っていきます。
これを知れば、あなたも「AIってこんなことまでできるのか!」と驚くこと間違いなし!?
一緒に次のステップへ進んで、AIエンジニアとしての知識をさらに深めていきましょう。次回の更新をお楽しみに!

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