ニューラルネットワークは、機能とその機能的派生物を学習できますか?


10

ニューラルネットワーク(NN)は、特定の仮定(ネットワークと近似する関数の両方)の下で、関数とその導関数の両方に対するユニバーサル近似と見なすことができることを理解しています。実際、私は単純であるが自明ではない関数(たとえば、多項式)に対していくつかのテストを行っており、確かにそれらとそれらの1次導関数をよく近似できるようです(例を以下に示します)。

しかし、私には明確でないのは、上記につながる定理が汎関数とその汎関数導関数に拡張される(または拡張される可能性がある)かどうかです。たとえば、汎関数: を汎関数微分: 考え ここで、は、完全かつ非自明に依存します。NNは上記のマッピングとその機能的導関数を学習できますか?より具体的には、ドメインをで離散化し、(離散化された点で)を入力として提供し、

F[f(x)]=abdx f(x)g(x)
δF[f(x)]δf(x)=g(x)
f(x)g(x)x[a,b]f(x)F[f(x)]出力として、NNはこのマッピングを(少なくとも理論的には)正しく学習できますか?もしそうなら、それはマッピングの機能的導関数も学ぶことができますか?

私はいくつかのテストを行いましたが、NNは確かにある程度マッピング学習するようです。ただし、このマッピングの精度は問題ありませんが、それほど優れていません。そして厄介なのは、計算された関数微分が完全なガベージであるということです(これらの両方はトレーニングなどの問題に関連している可能性があります)。以下に例を示します。F[f(x)]

NNが汎関数とその汎関数微分の学習に適していない場合、別の機械学習方法はありますか?

例:

A NNが関数学習するように訓練された:(1)以下では、関数とその導関数近似の例である範囲[-3,2]の上には: その妥当からへの近似が得られます: 予想どおり、へのNN近似とその1次導関数は、トレーニング中により良い最小値が見つかるなど、トレーニングポイントの数、NNアーキテクチャーとともに向上することに注意してください。f(x)=x3+x+0.5d f x / d x f x 関数df(x)/dx関数導関数f(x)

(2)以下は、汎関数とその汎関数微分の近似の例ですは、汎関数を学習するようにトレーニングされました。トレーニングデータは、という形式の関数を使用して取得されました。ここ、とはランダムに生成されました。次のプロットは、NNが実際に非常によく 近似できることを示してい ます。例(特定の)を以下に示します。 興味深いメモとして、 NN近似F[f(x)]=12dx f(x)2f(x)=axb B F [ F X ] 、F X F [ F X ]abF[f(x)]機能的f(x)機能的誘導体F[f(x)] (例(1)のように)トレーニングポイントの数などで改善するようですが、関数導関数は改善しません。


興味深い質問です。関数Fの入力fをどのように表現していますか?私は、fがf値のベクトル(たとえば、1000サンプルのベクトル)に量子化されていると想定しています。もしそうなら、あなたの3番目のプロットのx軸は何を意味していますか?4番目のプロットのx軸とは異なるようです。ネットワークはF [f]とdF / dfを学習するようにトレーニングされていますか、それともネットワークがトレーニングされたらdF / dfを計算していますか?
Christian Bueno

回答:


3

これは良い質問です。理論的な数学的証明が必要だと思います。私はディープラーニング(基本的にはニューラルネットワーク)でしばらく(約1年)作業しており、私が読んだすべての論文の知識に基づいて、これについての証拠はまだわかりません。しかし、実験的な証明という点では、フィードバックを提供できると思います。

以下の例を考えてみましょう:

ここに画像の説明を入力してください

この例では、多層ニューラルネットワークを介して、f(x)とF [f(x)]の両方を逆伝播で学習できるはずです。ただし、これがより複雑な関数に適用される場合でも、宇宙のすべての関数に適用される場合でも、より多くの証明が必要です。ただし、Imagenetの競合の例を考えると、1000個のオブジェクトを分類するために、非常に深いニューラルネットワークがよく使用されます。最高のモデルは、5%までの信じられないエラー率を達成できます。このようなディープNNには10を超える非線形層が含まれており、これはディープネットワークを通じて複雑な関係を表すことができるという実験的な証明です[1つの非表示層を持つNNがデータを非線形に分離できることがわかっているという事実に基づく]。

しかし、すべての派生物を学習できるかどうかには、さらに調査が必要です。

機能とその派生物を完全に学習できる機械学習方法があるかどうかはわかりません。申し訳ありません。


お返事ありがとうございます。ニューラルネットワークが関数型関数に近似できることに、最初は少し驚いた。それが可能であるという事実を受け入れると、その関数の導関数に関する情報が(関数の場合のように)ソリューションに含まれる必要があるように直感的に見えます(特に、例のように)単純な関数と関数の場合ただし、これは当てはまりません。あなたの例に照らして、元の投稿にいくつかの例を追加しました。
マイケル

クール、ニューラルネットワークの設定は何ですか?レイヤー数、隠しユニット、アクティベーション機能など
RockTheStar

私はさまざまな設定を試しました:1〜3の隠しレイヤー、5〜100の隠しユニット(レイヤーごと)、さまざまな入力数(機能は無限に行く限界として定義されていますが、4ポイントだけ試しました) 、シグモイドおよびタン(通常、およびLeCunが推奨するもの)アクティベーション関数、およびさまざまなトレーニング方法(逆伝播、QRPROP、粒子群最適化など)。私は社内といくつかの有名なソフトウェアの両方を試しました。物事を変更することで、関数の近似を改善することはできますが、関数微分ではできません。
マイケル

涼しい。どのソフトウェアを使用しましたか?ネットワーク設定を最適化するために相互検証を行いましたか?これが私の考えの一部です:(1)問題は高度に非線形であるため、3つ以上の非表示レイヤーが必要になる可能性があります(2)非表示の単位に不完全な設定を使用してみてください、つまり、入力100-50-20 -output、input-20-50-100-outputの代わりに、(3)シグモイドまたはtanhの代わりにReLUを使用します。研究は2010年代にいくつかの論文を発表し、ReLUがより良い結果をもたらすことができることを証明しました、(4)体重減少、学習率などのパラメーターが重要です、それらを適切に調整することを確認してください、(5)ツールとしてのカフェ
RockTheStar

社内ソフトウェアに加えて、私はstats ++、Encog、NeuroSolutionsを使用しました(後者は無料の試用版にすぎず、もう使用していません)。まだ相互検証を行って最適化を試みていませんが、そうするつもりです。他の提案も試します。どうもありがとうございました。
マイケル

3

ニューラルネットは、隠れ層のサイズが無限大になると、ユークリッドベクトル空間間の連続マッピングを近似できます。つまり、幅よりも奥行きを追加する方が効率的です。関数は単に範囲がであるマップ、つまりです。つまり、入力が有限次元のベクトル空間であり、導関数が逆モード微分(逆伝搬)によって簡単に見つけられる限り、ニューラルネットは汎関数を学習できます。また、入力を量子化することは、ネットワークを連続関数入力に拡張するための良い方法です。f:RMRNRN=1


0

機能がフォームである場合 次いで、十分なトレーニング機能所定の線形回帰を用いて学習することができるおよびターゲット値。これは、台形規則によって積分を近似することで行われます: で ここで、

F[f(x)]=abf(x)g(x)dx
g(x)fi(x), i=0,,MF[fi(x)]
F[f(x)]=Δx[f0g02+f1g1+...+fN1gN1+fNgN2]
F[f(x)]Δx=y=f0g02+f1g1+...+fN1gN1+fNgN2
f0=a, f1=f(x1), ..., fN1=f(xN1), fN=b,
a<x1<...<xN1<b,  Δx=xj+1xj

我々が持っていると仮定訓練機能。各について、 Mfi(x), i=1,,Mi

F[fi(x)]Δx=yi=fi0g02+fi1g1+...+fi,N1gN1+fiNgN2

次に、値は、説明変数の行列を使用した線形回帰問題の解として見つかり とターゲットベクトル。g0,,gN

X=[f00/2f01f0,N1f0N/2f10/2f11f1,N1f1N/2fM0/2fM1fM,N1fMN/2]
y=[y0,,yM]

簡単な例でテストしてみましょう。がガウスであると仮定します。g(x)

import numpy as np 

def Gaussian(x, mu, sigma):
    return np.exp(-0.5*((x - mu)/sigma)**2)

ドメイン離散化しますx[a,b]

x = np.arange(-1.0, 1.01, 0.01)
dx = x[1] - x[0]
g = Gaussian(x, 0.25, 0.25)

トレーニング関数として、異なる周波数の正弦と余弦を考えてみましょう。ターゲットベクトルの計算:

from math import cos, sin, exp
from scipy.integrate import quad

freq = np.arange(0.25, 15.25, 0.25)

y = []
for k in freq:
    y.append(quad(lambda x: cos(k*x)*exp(-0.5*((x-0.25)/0.25)**2), -1, 1)[0])
    y.append(quad(lambda x: sin(k*x)*exp(-0.5*((x-0.25)/0.25)**2), -1, 1)[0])
y = np.array(y)/dx

ここで、リグレッサマトリックス:

X = np.zeros((y.shape[0], x.shape[0]), dtype=float)
print('X',X.shape)
for i in range(len(freq)):
    X[2*i,:] = np.cos(freq[i]*x)
    X[2*i+1,:] = np.sin(freq[i]*x)

X[:,0] = X[:,0]/2
X[:,-1] = X[:,-1]/2

線形回帰:

from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(X, y)
ghat = reg.coef_

import matplotlib.pyplot as plt 

plt.scatter(x, g, s=1, marker="s", label='original g(x)')
plt.scatter(x, ghat, s=1, marker="s", label='learned $\hat{g}$(x)')
plt.legend()
plt.grid()
plt.show()

ここに画像の説明を入力してください データは実際の関数の周りにいくらか広がっていますが、ガウス関数はうまく学習されています。がゼロに近い場合、広がりは大きくなります。この広がりは、Savitzky-Golayフィルターで平滑化できます。g(x)

from scipy.signal import savgol_filter
ghat_sg = savgol_filter(ghat, 31, 3) # window size, polynomial order

plt.scatter(x, g, s=1, marker="s", label='original g(x)')
plt.scatter(x, ghat, s=1, marker="s", label='learned $\hat{g}$(x)')
plt.plot(x, ghat_sg, color="red", label='Savitzky-Golay $\hat{g}$(x)')
plt.legend()
plt.grid()
plt.show()

ここに画像の説明を入力してください

一般に、に直線的に依存しないであり、 を離散化した後も 関数として書き込むことができます。これは、の汎関数にも当てはまります。 は有限差分で近似できる ため。の非線形関数であるF[f(x)]f(x)

F[f(x)]=abL(f(x))dx
f0,f1,fNx
F[f(x)]=abL(f(x),f(x))dx
ff0,f1,fNLf0,f1,fN、それはおそらく非線形の方法、例えばニューラルネットワークやSVMでそれを学ぼうとするかもしれませんが、それはおそらく線形の場合ほど簡単ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.