ニューラルネットワークの背後にあるシンプルな数学

ニューラルネットワークの背後にあるシンプルな数学

[[376715]]
> Unsplash の Alina Grubnyak による画像

ニューラル ネットワークは、データを情報にマッピングする汎用近似器です。これは何を意味するのでしょうか? ニューラル ネットワークはあらゆる問題を解決できるのでしょうか? ニューラル ネットワークは、シーンごと/フレームごとの分析、株価予測、小売、その他多くの目的に実証されたソリューションです。私たちの多くは企業レベルでこれを使用していますが、実際に理解している人はどれくらいいるでしょうか?

「ニューラル ネットワークはあらゆる問題を解決できるか?」という質問に答えるために、まずは基本から始めましょう。 NeuralNet は、入力、隠し、出力のレイヤーと呼ばれる垂直に積み重ねられたコンポーネントで構成されています。各層は一定数のニューロンで構成されています。入力レイヤーにはデータセットの属性 (機能) が含まれます。問題の説明に応じて、複数のニューロンを持つ複数の隠し層が存在し、出力層に複数のニューロンが存在する場合があります。

パーセプトロンと活性化関数を理解する

パーセプトロン(またはニューロン)は、ニューラル ネットワークの基本粒子です。これは閾値設定の原理に基づいて動作します。 f(x)を閾値40の合計関数とします。


> 図1. ニューロンの発火(著者撮影)

どちらの場合も、定義された関数は 2 つの入力 x1 と x2 の加算を返します。ケース 1 では、関数はしきい値未満の 30 を返します。ケース 2 では、関数はしきい値より大きい 50 を返すため、ニューロンが発火します。さて、この機能はそれよりもさらに複雑になります。典型的なニューラル ネットワークのニューロンは、入力値の合計に重みと追加されたバイアスを乗じたものを受け取り、この関数 (活性化関数またはステップ関数とも呼ばれます) が決定を下すのに役立ちます。


> 図 2. パーセプトロン (著者撮影)

活性化関数は、ノードの出力をバイナリ出力に変換します。重み付けされた入力がしきい値を超えると 1 になり、それ以外の場合は 0 になります (活性化関数によって異なります)。最も一般的に使用される活性化関数は次の 3 つです。

シグモイド

シグモイドは、非線形関係を捉えるのに役立つ、広く使用されている活性化関数です。


> 図3. シグモイド曲線(出典)

z の値がどのような値であっても、関数 Φ(z) は常にバイナリ (0/1) 出力を返します。したがって、確率ベースの問題で広く使用されています。

tanh (正接双曲線)

これはシグモイド関数に似ていますが、tanh の範囲は -1 ~ 1 であるため、分類問題に適しています。非線形です。


> 図4. tanh曲線(著者撮影)

ReLu (整流線形ユニット)

これは他の活性化関数ほど複雑ではないため、ディープラーニングで最も一般的に使用される活性化関数です。 f(x)は0またはxを返します。


> 図5. ReLu曲線(著者撮影)

ReLu 関数の導関数は 0 または 1 を返すため、計算が簡単になります。

ニューラルネットワーク

ニューラル ネットワークのブラック ボックスを理解するために、3 層の基本構造を考えてみましょう。入力層、密層/隠れ層(ニューロンの両側に接続)、および出力層。


> 図 6. シンプルなニューラル ネットワーク (画像提供: 著者)

重みとバイアスはランダムに初期化されます。ニューラル ネットワーク出力の精度は、重みとバイアスを継続的に更新して最適な値を見つけることにあります。 y = wx という方程式を考えてみましょう。ここで、「w」は重みパラメータ、「x」は入力特徴です。簡単に言えば、重みは特定の入力属性 (機能) に与えられる重みを定義します。ここで、方程式 y = wx の解は常に原点を通ります。したがって、完全な適合に必要な自由度を提供するために、偏差と呼ばれる切片が追加され、方程式は誰もがよく知っている ŷ = wx + b になります。したがって、バイアスによって活性化関数の曲線の軸が上向きまたは下向きに調整される可能性があります。

それでは、ニューラル ネットワークがどれほど複雑になるかを見てみましょう。私たちのネットワークでは、入力層には 2 つのニューロンがあり、密層には 4 つのニューロンがあり、出力層には 1 つのニューロンがあります。各入力値には重みとバイアスが関連付けられます。入力特徴と重みおよびバイアスの組み合わせは密なレイヤーを通過し、ネットワークは活性化関数の助けを借りて特徴を学習し、ネットワークは独自の重みとバイアスを持ち、最終的に予測 (出力) を行います。これは順方向伝播です。では、ネットワークには合計でいくつのパラメータがあるのでしょうか?


> 図7. ニューラルネットワークの合計パラメータ計算(画像提供:著者)

このような単純なネットワークでは、最適なソリューションを得るために合計 17 個のパラメータを最適化する必要があります。隠れ層の数とそれらの中のニューロンの数が増えると、ネットワークのパワーは増大します (ある一定の点まで)。しかし、最適化には指数関数的に多くのパラメータが必要になり、多くの計算リソースを消費することになります。したがって、トレードオフを行う必要があります。

ネットワークの更新

順方向伝播を 1 回繰り返した後、実際の出力と予測出力の差 (二乗) を取ってエラーが計算されます。ネットワークでは、入力関数と活性化関数は固定されています。したがって、重みとバイアスを変更してエラーを最小限に抑えることができます。エラーを変更するために重みをどの程度変更するか、および変更の方向という 2 つの点に注意することで、エラーを最小限に抑えることができます。

コスト関数

単純なニューラル ネットワークは、値 = wx + b という線形関係に基づいて値を予測します。ここで、ŷ (予測) は y (実際) の近似値です。これで、いくつかの線形近似が可能になります。最適な直線を選択するために、コスト関数を定義します。

ŷ=θ₀+xθ₁とします。 ŷがyにできるだけ近くなるようにθ₀とθ₁の値を見つける必要があります。これを行うには、以下で定義される誤差を最小化するθ₀とθ₁の値を見つける必要があります。


> (著者撮影)

誤差、E = 実際の値と予測値の二乗差 = (=-y)²

したがって、コスト = (1/2n)(θ₀+xθ₁-y)² となります。ここで、n は平均二乗誤差の計算に使用されるポイントの合計数であり、計算量を減らすために 2 で割られています。したがって、このコスト関数を最小限に抑える必要があります。

勾配降下法

コスト関数を最小化することにより、アルゴリズムはθ₀とθ₁の最適値を見つけるのに役立ちます。 C = (1/2n)(θ₀+xθ₁ — y)²であることがわかっています。解析解を得るには、勾配と呼ばれる変数 (θ) に関して C を部分的に微分します。

これらの勾配は傾斜を表します。さて、元のコスト関数は二次関数です。したがって、グラフは次のようになります。


> 図8. 勾配降下曲線(著者撮影)

θ を更新するための式は次のとおりです。

点 P1 にいる場合、傾きは負になり、勾配は負になり、方程式全体は正になります。したがって、点は最小値に達するまで正の方向に下方向に移動します。同様に、点 P2 にいる場合、傾きは正であるため、勾配は正になり、方程式全体は負になり、最小値に達するまで P2 は負の方向に移動します。ここで、η は点が最小値に近づく速度であり、学習率と呼ばれます。すべてのシータは(いくつかのエポックで)同時に更新され、エラーが計算されます。

追加メモ

これを行うと、次の 2 つの潜在的な問題が発生する可能性があります。1. θ 値を更新しているときに、局所的最小値に陥る可能性があります。考えられる解決策の 1 つは、局所最小値を通過するのに役立つ、モメンタム付きの確率的勾配降下法 (SGD) を使用することです。 2. η が小さすぎると、収束に時間がかかります。あるいは、η が大きすぎる場合(または中程度に高い場合)、最小値の周りで振動し続け、収束することはありません。したがって、すべてのパラメータに対して同じ学習率を使用することはできません。これを修正するには、勾配が最小値に向かって移動するにつれて η の値を調整するルーチン (コサイン減衰など) を用意します。

逆伝播

勾配降下アルゴリズムを使用して、NeuralNet 内の重みとバイアスを最適化および更新する一連の操作。入力、単一の隠れ層、および出力を持つ単純なニューラル ネットワークを考えてみましょう (図 2)。

x を入力、h を隠れ層、σ をシグモイド活性化、w を重み、b をバイアス、wᵢ を入力重み、wₒ を出力重み、bᵢ を入力バイアス、bₒ を出力バイアス、O を出力、E を誤差、μ を線形変換 ((∑wᵢxᵢ) + b) とします。

ここで、入力から出力に至るまでに必要な一連の操作を積み重ねて、図 2 の計算グラフを作成します。


> 図9. 計算グラフ(著者提供画像)

ここで、E は O に依存し、O は μ2 に依存し、μ2 は b 1、w 3、h に依存し、h は μ1 に依存し、μ1 は x、w 1、b 5 に依存します。重みとバイアスの中間的な変化(相関)を計算する必要があります。隠し層は 1 つしかないため、入力と出力の重みとバイアスが存在します。したがって、2つのケースに分けることができます。

ケース1: 出力の重みとバイアスについて


> 図10. ケース1の計算グラフ(著者提供)

したがって、上記の2つの誤差変化方程式に導関数の値を入れると、次のように勾配が得られます。

重みとバイアスは次の式で更新できます。

この計算は、隠し層と出力に使用されます。同様に、入力層と隠れ層は以下のようになります。

ケース2: wrt.入力重みとバイアス


> 図11. ケース2の計算グラフ。(著者提供)

これらの勾配は以下を使用して更新できます。

両方の状況が同時に発生し、それが繰り返されるまでエラーがカウントされる回数をエポックと呼びます。ニューラルネットワークを監視します。一定数のエポックを実行した後、データセットの選択された機能に対して最適化された重みとバイアスのセットを設定します。この最適化されたネットワークに新しい入力が導入されると、重みとバイアスの最適化された値を使用して計算され、最大限の精度が達成されます。

ニューラルネットワークはどんな問題でも解決できるのでしょうか?

前述のように、ニューラル ネットワークは普遍的な近似値です。理論的には、あらゆる関数を表現することができ、したがってあらゆる問題を解決できます。ネットワークが大きくなるにつれて(隠れ層が増えるにつれて)、ネットワークのパワーは増しますが、最適化するパラメータの数は指数関数的に増加し、リソースを大量に消費します。

実装はここにあります。

この記事は、Shubham Dhingra 氏の記事「Simplified Mathematics behind Neural Networks」を Wenshuqiwu が翻訳したものです。転載の際は出典を明記してください。元のリンクは https://towardsdatascience.com/simplified-mathematics-behind-neural-networks-f2b7298f86a4 です。

<<:  報告書は、2030年までにサイバーセキュリティの分野でAIが人間に取って代わる可能性があると予測している。

>>:  AIが医療画像診断を強化し、潜在的な病気が隠れる場所をなくす

ブログ    
ブログ    

推薦する

AI分野におけるNVIDIA NeMoフレームワークの包括的な応用と利点の概要

1. NeMoフレームワークの紹介NVIDIA NeMo は、PyTorch と PyTorch L...

...

Spark Graphx はグラフの最大クリークマイニング、疑似並列アルゴリズムを実装します

[[206073]] ####背景:#### Spark graphxは最大クリークマイニングアルゴ...

Apache Flink トークシリーズ - PyFlink のコアテクノロジーを公開

皆さんこんにちは。本日のサミットで Apache PyFlink のコア技術を皆さんと共有できること...

...

Googleは従業員に対し、生成AIの秘密を「漏らしたり」、直接コードを書いたりしないように警告している。

ロイター通信によると、6月15日のニュースでは、Googleは生成AIの最も熱心な支持者の1つである...

...

人工知能がウェブホスティング業界に優位性をもたらす

近年、ウェブホスティング業界は劇的に変化しました。そして、業界を永遠に変える可能性のあるいくつかのト...

...

機械学習が物流、輸送、旅行を変革

スイスはアルプス山脈の高速道路で何万台もの貨物トラックによる渋滞と汚染に直面したため、世界最長かつ最...

...

LLaVA オープンソース モデルに基づくビデオチャット アシスタントの構築

導入大規模言語モデルは革命的な技術であることが証明されています。大規模言語モデルの力をベースにした多...

大規模モデルは小規模モデルに正確にフィードバックし、知識の蒸留はAIアルゴリズムのパフォーマンスを向上させるのに役立ちます。

01 知識蒸留の誕生の背景近年、ディープニューラルネットワーク (DNN) は、特にコンピューター...

Kornia オープンソースの微分可能コンピュータビジョンライブラリ、Pytorch ベース、GitHub 3000 スター

OpenCV の創設者 Gary Bradski 氏らが最近、Kornia のレビューを公開しました...