ニューラル ネットワークを始めるにはどうすればよいですか?

入門書Pythonニューラルネットワークプログラミング」がおすすめです。ドゥバンスコア9.2。

足し算、引き算、掛け算、割り算ができれば、独自のニューラル ネットワークを作成できます。私たちが使用する最も難しい演算は勾配計算ですが、できるだけ多くの読者が概念を理解できるように、この概念を説明します。

この本では、出航し、ニューラル ネットワークを構築し、手書きの数字を認識します。

非常に単純な予測ニューロンから始めて、限界に達するまで徐々に改善していきます。途中、いくつかの短い立ち寄りをして、いくつかの数学的概念を学びます。ニューラル ネットワークがどのように学習して問題の解決策を予測するかを理解するには、これらの数学的概念が必要です。

関数、単純な線形分類器、反復改良、行列乗算、勾配計算、勾配降下法による最適化、さらには幾何学的回転などの数学的アイデアを見ていきます。ただし、これらすべての数学的概念は非常にエレガントかつ明確な方法で説明されており、読者は簡単な中学数学以上の予備知識や技術的専門知識を必要としません。

最初のニューラル ネットワークの作成に成功したら、このアイデアを持ち帰り、さまざまな方法で使用します。たとえば、追加のトレーニング データに頼ることなく、画像処理を使用して機械学習を改善できます。ニューラル ネットワークの仕組みを覗いて、深い洞察が得られるかどうかを見てみましょう。多くの本では、ニューラル ネットワークがどのように機能するかについて説明していません。

ニューラル ネットワークを段階的に作成しながら、非常にシンプルで便利で人気のあるプログラミング言語である Python も学習します。繰り返しますが、これまでのプログラミング経験は必要ありません。

この本では、ニューラル ネットワークの背後にある概念を明らかにし、それを Python で実装する方法を示します。本全体は 3 つの章と 2 つの付録に分かれています。第 1 章では、ニューラル ネットワークで使用される数学的考え方を紹介します。第 2 章では、Python を使用してニューラル ネットワークを実装し、手書きの数字を認識し、ニューラル ネットワークのパフォーマンスをテストする方法を紹介します。第 3 章では、読者が単純なニューラル ネットワークについてさらに学び、訓練されたニューラル ネットワークの内部を観察し、ニューラル ネットワークのパフォーマンスをさらに向上させることを試み、関連知識の理解を深めます。付録では、必要な微積分の知識とRaspberry Pi の知識をそれぞれ紹介します。

この本は、ニューラル ネットワークの研究と探索に携わりたい読者のための学習参考書であり、人工知能、機械学習、深層学習などの関連分野に興味がある読者にも適しています。


「Python ニューラル ネットワーク プログラミング」数学的知識: 微積分入門

A.1 直線

まず、非常に単純なシナリオから始めましょう。

車が時速 30 マイルの一定速度で走行していると想像してください。速くもなく、遅くもなく、ちょうど時速30マイルです。

さまざまな時点での車の速度を 30 分ごとに測定して、以下の表に示します。

時間/分 速度(mph)
0 30
0.5 30
1.0 30
1.5 30
2.0 30
2.5 30
3.0 30

以下の図は、これらの時点での速度を視覚化したものです。

速度は時間とともに変化しないことがわかり、これは水平線です。ラインは上向き (加速) または下向き (減速) に傾斜せず、車は時速 30 マイルのままです。

速度の数学的表現、これをsと呼びます。

さて、速度が時間とともにどのように変化するかと誰かが尋ねたら、速度は時間とともに変化しないと答えるでしょう。変化率は0です。つまり、速度は時間に依存せず、相関関係は0になります。

微積分を終えたところです。

微積分とは、他のものが変化するにつれて、あるものがどのように変化するかを表現するための関係を確立することです。ここでは、時間の経過とともに速度がどのように変化するかを考えます。

この関係を数学的に表現する方法があります。

これらの記号は何ですか? この表記法は、「時間が変化すると速度がどのように変化するか」、または「s が t とどのように関係するか」を意味すると考えてください。

したがって、この式は速度が時間とともに変化しないことを示しており、数学者が使用する巧妙な方法です。別の言い方をすると、速度は時間の経過とともに影響を受けません。速度の時間依存性は 0 です。これが式の 0 の意味です。それらは全く無関係です。

実際、速度s = 30 の式をもう一度見ると、この無相関性がわかります。この表現では時間についてはまったく言及されていません。つまり、この式には隠れた時間tはありません。したがって、∂s / ∂t = 0 を理解するために複雑な計算を行う必要はなく、式を観察するだけでこの結論に達することができます。数学者はこれを「観察法」と呼んでいます。

変化率を考慮した ∂s/∂t のような式は微分値と呼ばれます。私たちの目的上、これを知る必要はありませんが、他の場所でこの用語に遭遇する可能性があります。

さて、アクセルペダルを踏むと何が起こるか見てみましょう。これはとてもエキサイティングです!

A.2 スラッシュ

同じ車が時速30マイルで走っていると想像してみてください。軽くアクセルを踏むと車は加速した。アクセルペダルを踏み続け、インストルメントパネルの目盛を観察し、30秒ごとに速度を記録しました。

30秒後、車は時速35マイルで走行していました。1分後、車は時速40マイルで走行した。90秒後、車は時速45マイルに達しました。2分後、車は時速80マイルに達しました。車の加速は毎分 10 マイルです。

以下の表は、同じ情報をまとめたものです。

時間/分 速度(mph)
0.0 30
0.5 35
1.0 40
1.5 45
2.0 50
2.5 55
3.0 60

もう一度視覚化してみましょう。

車の速度が時速 30 マイルから時速 60 マイルまで一定の割合で上昇していることがわかります。速度の増分は 30 分ごとに同じであるため、時間の経過に伴う速度のグラフは直線となり、速度がわかります。

速度を表す式は何ですか? 時間 0 では、速度は 30 です。この後、速度は毎分 10 マイルずつ増加します。したがって、速度の式は次のようになります。

または、次のような表記を使用します。

ここで、定数 30 がわかります。また、(10 x t) も参照してください。これは、1 分あたり 10 マイルの増加を意味します。10 が、私たちが引いた線の傾きであることがすぐにわかります。直線の一般的な形式はy  = a x  + b であることに注意してください。ここで、a は傾きまたは勾配です。

それでは、速度対時間の式はどのようになりますか? さて、これについてはすでに説明しましたが、速度は毎分 10 マイルずつ増加します。

この式が示していることは、∂s / ∂t がゼロではないため、速度と時間の間には確かに相関関係があるということです。

直線y  = a x + b の傾きはa であることを思い出してください。s = 30 + 10t の傾きは「観察法」によって 10 であることがわかります。

素晴らしい!まったく難しいことではない微積分の基本の多くを取り上げてきました。さあ、アクセルを踏み込んでみましょう!

A.3 曲線

停止状態から車を発進させ、アクセルペダルを強く踏み込み、そのまま放さないと想像してください。もともと動いていないので開始速度は0です。

アクセルペダルを非常に強く踏んでも、車の速度が一定の割合で上がらないと想像してください。その代わりに、車はより速くスピードを上げます。これは、アクセルペダルを長く踏み続けると、車自体の加速度が 1 分あたり 10 マイル増加するのではなく、増加することを意味します。

この例では、以下の表に示すように、毎分速度を測定すると想像してください。

時間/分 速度(mph)
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64

よく見ると、速度を分単位の時間の二乗にすることにしたことがわかります。つまり、時間が 2 分の場合、速度は 22 = 4、時間が 3 分の場合、速度は 32 = 9、時間が 4 分の場合、速度は 42 = 16 などとなります。

さて、この式も簡単に書くことができます。

例の車の速度が意図的であることはわかっていますが、これは計算方法を示す良い例です。

この式を視覚化して、時間の経過とともに速度がどのように変化するかを感じてみましょう。

速度の変化がどんどん早くなっているのがわかります。現在、グラフは直線ではなくなりました。速度が爆発的に急速に増加し、非常に大きな値になることが考えられます。20 分で速度は時速 400 マイルになり、100 分で速度は時速 10,000 マイルになります。

興味深い質問です。速度の変化率は時間に対してどのようになりますか? つまり、時間の経過とともに速度はどのように変化するのでしょうか?

これは、特定の時点での実際の速度がどれくらいであるかという質問と同じではありません。すでに式 s = t2 があるため、値はすでにわかっています。

私たちが尋ねているのは、ある時点での速度の変化率はいくらかということです。この例では、この文はグラフがどこで曲がるかを意味しますか?

前の 2 つの例を思い出してください。変化率は速度対時間曲線の傾きです。車が時速 30 マイルの一定速度で走行しているとき、速度は変化しないため、変化率は 0 になります。車が安定して加速しているときの速度変化率は時速 16 マイルです。どの時点でも、時速 10 マイルがほぼ適切です。2 分間の変化率は 10 マイル/分です。4 分では、これは 100 分でも当てはまります。

グラフにも同じ考え方を適用できますか? もちろんそうすることもできますが、ここではそれが当然のことだと考えましょう。

A.4 手描きの微積分

時間が 3 分になった場合に何が起こるかを詳しく見てみましょう。

3分で時速9マイルになります。3分を過ぎると速度が速くなることが分かります。これを 6 分で起こったことと比較してみましょう。6分の時点での速度は時速36マイルでした。6分を過ぎると速度が速くなります。

ただし、速度の増加率は 3 分後の時点よりも 6 分後の時点の方が大きいこともわかっています。これが、3 分と 6 分で起こることの本当の違いです。

以下の画像に示すように、このコントラストを視覚化してみましょう。

6 分の傾きが 3 分の傾きよりも大きいことがわかります。傾きは、必要な変化率です。これは重要な認識ですので、もう一度言っておきましょう。曲線上の任意の点での変化率は、その点での曲線の傾きになります。

しかし、曲線の傾きはどうやって測定するのでしょうか? 直線の場合は傾きを測定するのが簡単ですが、曲線の場合は接線と呼ばれる直線を引くことができ、接線はある点で曲線の傾きにできるだけ近くなければならず、接線の傾きからその点での曲線の傾きを推定することができます。実際、これは、他の測定が登場する前に、人々が曲線の傾きを測定する方法でした。

読者にこのアプローチを味わってもらうために、この大雑把な方法を試してみましょう。下の図は速度曲線のグラフを示しています。6 分で速度曲線との交点が 1 つだけある接線が得られます。

私たちは中学校の数学で、勾配を計算するには、斜面の高さを幅で割ることを知っています。上の図では、高さ(速度)がΔs、幅(時間)がΔtです。記号Δは「インクリメント」、つまり小さな変化と呼ばれます。したがって、Δt は t の小さな変化です。

傾きはΔs/Δtです。ベベルの場合は、任意のサイズの三角形を選択し、定規を使用して高さと幅を測定します。測定結果によると、Δs が 9.6、Δt が 0.8 の三角形が正確に得られました。したがって、結果の傾きは次のようになります。

重要な結果が得られました!6 分の時点での速度変化率は。

定規に頼ったり、最善を尽くしたり、手で接線を引こうとしたりしても、それほど正確ではないことを理解する必要があります。それでは、話をもう少し複雑にしてみましょう。

A.5 手書き以外の微積分

下の画像をよく見てください。この画像には新しいマークされた線があります。この線は 2 点で曲線と交差しているため、接線ではありません。ただし、ラインはどういうわけか 3 分の時点を中心にしているように見えます。

実際、このラインは 3 分の時点に関連しています。選択する時点は、関心のある時点の上下 t = 3 分の時点です。ここでは、t = 3 分の時点の上下 2 分、つまり t = 1 分と t = 5 分を選択しました。

数学的表記を使用すると、Δx は 2 分であると言えます。選択した時点は x-Δx と x+Δx です。記号 Δ は単に「小さな変化」を意味するため、Δx は x 座標の小さな変化であることに注意してください。

あなたはなぜこれをやっているのですか?読者はすぐに理解できるでしょう、まずは読者の食欲を刺激しましょう。

時点 x-Δx および x+Δx での速度に注目し、これら 2 つの点の間に直線を引くと、その傾きが中間点 x での接線の傾きとほぼ同じになる線が得られます。もう一度上のグラフを見て、その直線に注目してください。もちろん、この線は x における接線の実際の傾きとまったく同じ傾きではありませんが、それを修正します。

この線の勾配(傾き)を計算してみましょう。以前に使用した方法と同様に、ベベルの高さを幅で割って勾配を取得します。下の画像は、ベベルの高さと幅をより明確に示しています。

高度は、2 つの点 x-Δx および x + Δx での速度の差、つまり 1 分と 5 分での 2 つの速度の差です。これら 2 つのポイントでの速度は 12 = 1 および 52 = 25 マイルであることがわかっているため、速度の差は 24 です。幅の計算は非常に簡単で、x-Δx と x+Δx の間の距離、つまり 1 と 5 の間の距離、つまり 4 です。したがって、次のようになります。

線の勾配は、毎分 6 マイルでの t = 3 分の接線の勾配に近似します。

少し立ち止まって、これまでに行われたことを確認してみましょう。まず、フリーハンドの接線を使用して曲線の傾きを計算しようとしました。私たちは人間であり、飽きたり、退屈したり、間違いを犯したりするため、この方法は決して正確ではなく、何度も使用することはできません。次の方法では、フリーハンドの接線は必要ありませんが、代わりに、正しい線とほぼ同じ傾きを持つ別の線を作成します。2番目の方法はコンピュータが自動的に行うことができ、人手を必要としないため何度でも実行でき、速度も非常に速いです。

かなり良いですが、まだ十分ではありません。

2 番目のメソッドは近似値のみを取得します。この値を正確にするためにはどうすればよいでしょうか? 私たちの目標は、物事がどのように変化するかを正確な数学的方法で解明し、勾配値を取得することです。

ここで魔法が起こります。数学者は非常に軽くて鋭利なツールを開発し、それをとても楽しんでいます。

幅を小さくするとどうなるでしょうか?つまり、Δxを小さくするとどうなるでしょうか?以下の図は、Δx が徐々に小さくなるにつれて得られるいくつかの近似線または傾斜線を詳しく示しています。

 

Δx = 2.0、Δx = 1.0、Δx = 0.5、Δx = 0.1 の線を引きました。ラインが関心のあるポイントである 3 分のポイントにどんどん近づいていることがわかります。Δx の値を減らし続けると、直線が 3 分での真の接線にどんどん近づいていくことが想像できます。

Δx が無限に小さくなると、直線は真の接線に限りなく近づきます。これはとてもクールです!

バイアスをどんどん小さくして近似を改善し、解に近づけるという考え方は、あまりにも強力すぎます。数学者は曲がりくねった道を使って、直接解決するのが難しい問題を解決します。正面から攻撃するというよりは、横から忍び込む感じですね。

A.6 図のない微積分

微積分とは物事がどのように変化するかを正確な数学的方法で理解することであると先ほど言いました。Δx を徐々に縮小するというこのアイデアを、車の速度曲線など、これらのものを定義する数式に適用できるかどうかを見てみましょう。

速度は時間の関数である、つまり s = t2 であることがわかっています。速度が時間の関数としてどのように変化するかを知りたいと考えています。これは、t に関して曲線をプロットしたときの s の傾きであることがわかりました。

ただし、変化率 ∂s / ∂t は、作成した線の高さを幅で割った値に等しくなります。ただし、Δx は非常に小さいです。

高さはどれくらいですか?前に見たように、これは (t + Δx)2 - (t - Δx)2 です。つまり、式 s = t2 (t は対象点の垂直オフセット Δx です) に従って、対応する s が計算されて減算されます。

幅はどれくらいですか?前に見たように、簡単に言えば、これは (t + Δx) と (t - Δx) の間の距離、つまり 2Δx です。

もうすぐだ、

式を拡張して簡略化してみましょう

実際、代数自体が非常にきれいに単純化されているのは幸運です。

目標を達成しました!数学的には、正確な変化率は ∂s / ∂t = 2t です。これは、任意の時間 t において、速度の変化率が ∂s / ∂t = 2t であることがわかっていることを意味します。

t = 3 分では、∂s / ∂t = 2t = 6 になります。この値は近似法を使用する前に実際に確認しました。t = 6 分では、∂s / ∂t = 2t = 12 となり、以前に見つけた値と非常に正確に一致します。

t = 100 分のこの値はいくらですか? ∂s / ∂t = 2t = 毎分 200 マイル。つまり、100 分後に車は時速 200 マイルで加速していることになります。

少し時間を取って、私たちがやったことがどれほど重要でクールなことかを考えてみましょう。任意の時点での車の速度の変化率を正確に知ることができる数式があります。前の説明から、変化率は時間の経過とともに変化することがわかります。

代数的単純化が適切であることは幸運ですが、単純な s = t2 では、Δx を意図的に縮小しようとする機会が与えられません。そこで、車の速度がもう少し複雑な別の例を試してみましょう。

さて、高さはどれくらいでしょうか?これは、t+Δx および t-Δx で計算された s の差です。

つまり、高さは、(t + Δx)2 + 2(t + Δx) - (t - Δx)2 - 2(t - Δx) となります。

幅はどれくらいですか?これは (t + Δx) と (t - Δx) の間の距離で、やはり 2Δx です。

式を拡張および簡略化する

これは重要な結果です!悲しいことに、代数はこれを少し簡単に単純化しすぎます。ここには後で説明するパターンがあるため、汗をかかずに結果が得られます。

それほど複雑ではない別の例を試してみましょう。車の速度を時間の 3 乗に設定します。

式を拡張および簡略化する

さて、物事はさらに面白くなります!Δx を含む結果が得られますが、その前に、式内の Δx は互いに打ち消し合います。

そうですね、勾配が正しくなるのは、Δx がどんどん小さくなり、無限に小さくなった場合に限られることに注意してください。

ここが一番クールな場所です!Δx がどんどん小さくなると、式 ∂s / ∂t = 3t2 + Δx2 の Δx はどうなるでしょうか? なくなってしまった!これが驚くべきことに思われる場合は、Δx が非常に非常に小さい値であると想像してください。より小さい値を考え、次にさらに小さい値を考えてみることができます。Δx がどんどんゼロに近づくように、何度も繰り返すことができます。したがって、これを 0 として扱い、この問題をすべて回避しましょう。

これにより、私が探していた数学的に正確な答えが得られます。

これは素晴らしい結果です。今回は微積分を行うために強力な数学ツールを使用していますが、それはまったく難しくありません。

A.7 モード

Δx のようなデルタを取得し、デルタをどんどん小さくして、何が起こるかを観察し、導関数を計算します。嬉しいことに、このような作業をすべて行わずに導関数を直接計算できるのです。

計算された導関数を見て、何らかのパターンが観察できるかどうかを確認してください。

t の関数の導関数は、t の累乗が 1 減じられることを除いて同じであることがわかります。したがって、t4 は t3 になり、t7 は t6 になり、以下同様になります。とても簡単です!t は t1 であるため、t の導関数は 1 である t0 になります。

3、4、5 のような定数 (定数変数、a、b、c と呼ぶこともできます) には変化率がないため、定数は単に消滅します。それが、それらが定数と呼ばれる理由です。

しかし、ちょっと待ってください。t2 は t ではなく 2t になり、t3 は t2 ではなく 3t2 になることに注意してください。ここにはもう 1 つのステップがあり、指数が減算される前に、指数が乗数として使用されます。したがって、2t5 の指数から 1 を減算する前に、5 の指数を乗数として使用する必要があるため、5 × 2t4 = 10t4 となります。

以下は、微積分演算を実行するときに使用されるこのべき乗則を要約したものです。

この新しいテクニックを他の例で試してみましょう。

したがって、このルールにより多くの差別化が可能になり、ほとんどの目的で必要なのはこれだけです。このルールは、多項式、つまりy  = a x 3 + b x 2 + c x  + d などのさまざまな変数の累乗で構成される式にのみ適用されますが、sin xや cos xなどの式には適用されません。べき乗則を使った微積分には多くの用途があるため、これは大きな欠点ではありません。

ただし、ニューラル ネットワークの場合は追加のツールが必要です。これについては次のセクションで説明します。

A.8 関数の関数

関数を想像してみる

ここで、y自体も関数です

必要に応じて、f  = ( x3  +  x )2と書くこともできます。

yが変化するとf はどのように変化しますか? つまり、 ∂ f  / ∂ yは何でしょうか? 先ほど得たべき乗則を適用し、べき乗を掛けて、べき指数から 1 を引くだけで、この計算は非常に簡単で、 ∂ f /  ∂ y = 2 yが得られます。

もう 1 つの興味深い質問 - x が変化するとf はどのように変化しますか? 式f  = ( x3x )2を展開して、同じルールを適用することができます。何も考えずに ( x 3 +  x )2 が 2( x 3 +  x ) になるようにルールを調整することはできません

前と同じように、デルタを徐々に減少させながらこの式を長く困難な方法で解くと、ここに別のパターンのセットがあることに驚くでしょう。早速答えに移りましょう。

パターンは次のようになります。

これは非常に重要な結果であり、これを連鎖規則と呼びます。

ご覧のとおり、このモードでは、タマネギの皮をむくのと同じように、化合物レイヤーをレイヤーごとに解きほぐすように、レイヤーごとに導関数を計算できます。f  / ∂ xを計算するには、最初に∂ f  / ∂ yを計算し、次に ∂ y  / ∂ xを計算する方が簡単であることがわかります。これらがもっと簡単であれば、一見不可能に見える式でも微積分を行うことができます。連鎖ルールを使用すると、問題を細分化して、より小さく簡単な問題に分割することができます。

この例をもう一度見て、連鎖ルールを適用します。

計算により、より単純な項が得られます。最初の項は (∂ f  / ∂ y ) = 2 y、第 2 項は (∂ y  / ∂ x ) = 3 x 2 + 1 です。次に、連鎖規則を使用してこれらの用語を組み合わせると、次のようになります。

y  =  x 3 +  xであることがわかっているので、 xのみの式を取得します

なんて魔法のような瞬間を目撃できるのでしょうか。

なぜこれが行われるのか、最初にf をxに関して展開し、次に単純なべき乗則を適用して、結果の多項式に対して微積分を実行しないのかと疑問に思うかもしれません。もちろん、それを実行することもできますが、もし実行した場合、より困難な問題の多くを解決する連鎖ルールを指定できなくなります。

最後の例を見てみましょう。この例は、複数の独立変数を処理する方法を示しています。

関数を取得する場合

ここで、xyzは互いに独立した変数です。無関係とはどういう意味ですか? つまり、x、yzは任意の値を取ることができ、他の変数の値は気にしない、つまり相互に影響を与えないということです。これは、 yがxに関連する前の例y = x 3 +  xとは異なります。

∂f /  ∂xとは何ですか? この長い式の各用語を見てみましょう。最初の項は 2 xyなので、導関数は 2 yです。なぜそんなに単純なのでしょうか? y はxとは何の関係もないので、非常に簡単です。∂ f  / ∂ xと言うとき、 x が変化したときにf がどのように変化するかについて話していますyがxから独立している場合、定数として扱うことができます。つまり、y は2、3、10 などの別の数値になる場合もあります。

次の項は 3 x 2 zです。べき乗則を適用すると、 2×3 xzまたは 6 xzになります。x はzとは何の関係もないのでz を2、4、または 100 のような退屈な定数として扱います。zを変更してもxには影響しません

最後の項は 4 zであり、この項にはxは存在しません2 や 4 のような通常の定数として扱うため、これは完全になくなります。

最終的な答えは、

最後の例では、無関係であることがわかっている変数を自信を持って無視することが重要ですこれにより、かなり複雑な式に対する微積分の実行が非常に簡単になります。ニューラル ネットワークを観察する場合、この種の洞察が非常に必要になります。

微積分もできるよ!

ここまでできたら、あなたはすごいです!

微積分の本当の意味を本当に理解し、近似の使い方を理解し、段階的に改善して、最終的に微積分を導入します。その他の難しい問題で、通常の方法では解決できない場合は、これらの方法を使用して解決してみてください。

私たちは、べき乗則と連鎖則という 2 つの手法を学び、ニューラル ネットワークがどのように、なぜ機能するのかを理解するなど、多くの微積分を行うことができました。

新しい力を楽しんでください!

参考文献

人工知能アルゴリズム (第 3 巻): 深層学習とニューラル ネットワーク

この本では、画像認識やデータ サイエンスなど、現実世界のさまざまなタスクにおけるニューラル ネットワークについて説明します。ReLU 活性化、確率的勾配降下法、クロスエントロピー、正則化、ドロップアウト、可視化などの現在のニューラル ネットワーク技術を調査します。

本書は、人工知能の入門者や人工知能のアルゴリズムに興味のある読者の参考資料として最適です。

おすすめ

転載: blog.csdn.net/epubit17/article/details/131421277