AI-For-Beginners/translations/ja/lessons/3-NeuralNetworks/03-Perceptron
localizeflow[bot] 52d3c08120 chore(i18n): sync translations with latest source changes (final snapshot) 2026-01-30 01:25:08 +00:00
..
lab chore(i18n): sync translations with latest source changes (final snapshot) 2026-01-30 01:25:08 +00:00
Perceptron.ipynb 🌐 Update translations via Co-op Translator 2025-12-12 20:42:50 +00:00
README.md chore(i18n): sync translations with latest source changes (final snapshot) 2026-01-30 01:25:08 +00:00

README.md

ニューラルネットワーク入門: パーセプトロン

講義前クイズ

現代のニューラルネットワークに似たものを初めて実装しようとした試みは、1957年にコーネル航空研究所のフランク・ローゼンブラットによって行われました。それは「Mark-1」と呼ばれるハードウェア実装で、三角形、四角形、円などの原始的な幾何学的図形を認識するよう設計されていました。

フランク・ローゼンブラット Mark 1 パーセプトロン

画像はWikipediaより

入力画像は20x20のフォトセル配列で表され、ニューラルネットワークには400の入力と1つの二値出力がありました。単純なネットワークは1つのニューロン、つまり閾値論理ユニットを含んでいました。ニューラルネットワークの重みはポテンショメータのように機能し、トレーニングフェーズ中に手動で調整する必要がありました。

ポテンショメータは、回路の抵抗を調整できる装置です。

当時のニューヨーク・タイムズはパーセプトロンについて次のように書いています: 海軍が期待する電子コンピュータの胚であり、それは歩き、話し、見て、書き、自己複製し、自分の存在を意識することができるようになるだろう。

パーセプトロンモデル

モデルにN個の特徴があると仮定すると、入力ベクトルはサイズNのベクトルになります。パーセプトロンは二値分類モデルであり、入力データの2つのクラスを区別することができます。各入力ベクトルxに対して、パーセプトロンの出力はクラスに応じて+1または-1になります。出力は次の式で計算されます:

y(x) = f(wTx)

ここでfはステップ活性化関数です。

パーセプトロンのトレーニング

パーセプトロンをトレーニングするには、ほとんどの値を正しく分類する重みベクトルwを見つける必要があります。つまり、誤差を最小化する必要があります。この誤差Eは、パーセプトロン基準によって次のように定義されます:

E(w) = -∑wTxiti

ここで:

  • 和は誤分類を引き起こすトレーニングデータポイントiに対して取られます。
  • xiは入力データであり、tiは負の例と正の例に応じてそれぞれ-1または+1です。

この基準は重みwの関数とみなされ、これを最小化する必要があります。しばしば勾配降下法と呼ばれる方法が使用されます。この方法では、初期重みw(0)から始め、各ステップで次の式に従って重みを更新します:

w(t+1) = w(t) - η∇E(w)

ここでηは学習率と呼ばれ、∇E(w)はEの勾配を表します。勾配を計算した後、次の式になります:

w(t+1) = w(t) + ∑ηxiti

Pythonでのアルゴリズムは次のようになります:

def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):

    weights = [0,0,0] # Initialize weights (almost randomly :)
        
    for i in range(num_iterations):
        pos = random.choice(positive_examples)
        neg = random.choice(negative_examples)

        z = np.dot(pos, weights) # compute perceptron output
        if z < 0: # positive example classified as negative
            weights = weights + eta*weights.shape

        z  = np.dot(neg, weights)
        if z >= 0: # negative example classified as positive
            weights = weights - eta*weights.shape

    return weights

結論

このレッスンでは、二値分類モデルであるパーセプトロンについて学び、重みベクトルを使用してトレーニングする方法を学びました。

🚀 チャレンジ

自分でパーセプトロンを構築してみたい場合は、Microsoft Learnのこのラボを試してみてください。このラボではAzure MLデザイナーを使用します。

講義後クイズ

復習と自己学習

パーセプトロンを使用しておもちゃの問題や実際の問題を解決する方法を確認し、学習を続けるには、Perceptronノートブックに進んでください。

こちらも興味深いパーセプトロンに関する記事です。

課題

このレッスンでは、二値分類タスクのためのパーセプトロンを実装し、2つの手書き数字を分類するために使用しました。このラボでは、数字分類の問題を完全に解決することが求められます。つまり、与えられた画像に最も対応する数字を特定する必要があります。