Một mạng lưới thần kinh có thể học một chức năng, và dẫn xuất chức năng của nó?


10

Tôi hiểu rằng các mạng thần kinh (NN) có thể được coi là các xấp xỉ phổ quát cho cả chức năng và các dẫn xuất của chúng, theo các giả định nhất định (trên cả mạng và chức năng để tính gần đúng). Trên thực tế, tôi đã thực hiện một số thử nghiệm về các hàm đơn giản nhưng không tầm thường (ví dụ: đa thức) và dường như tôi thực sự có thể ước chừng chúng và các dẫn xuất đầu tiên của chúng (một ví dụ được trình bày bên dưới).

Tuy nhiên, điều không rõ ràng với tôi là liệu các định lý dẫn đến phần mở rộng ở trên (hoặc có thể được mở rộng) cho các hàm và các dẫn xuất chức năng của chúng. Xem xét, ví dụ, các chức năng:

F[f(x)]=abdx f(x)g(x)
với chức năng phái sinh:
δF[f(x)]δf(x)= =g(x)
f(x)phụ thuộc hoàn toàn, và không trivially, trêng(x). NN có thể học ánh xạ trên và đạo hàm chức năng của nó không? Cụ thể hơn, nếu người ta phân biệt miềnxtrên[một,b]và cung cấpf(x)(tại các điểm bị rời rạc) làm đầu vào vàF[f(x)]là đầu ra, NN có thể học bản đồ này một cách chính xác (ít nhất là về mặt lý thuyết) không? Nếu vậy, nó cũng có thể tìm hiểu đạo hàm chức năng của ánh xạ?

Tôi đã thực hiện một số thử nghiệm và dường như NN thực sự có thể học được ánh xạ F[f(x)] , ở một mức độ nào đó. Tuy nhiên, trong khi độ chính xác của ánh xạ này là OK, nó không tuyệt vời; và rắc rối là đạo hàm chức năng được tính là rác hoàn chỉnh (mặc dù cả hai điều này có thể liên quan đến các vấn đề với đào tạo, v.v.). Một ví dụ đã được biểu diễn ở dưới.

Nếu một NN không phù hợp để học một hàm và đạo hàm chức năng của nó, thì có một phương pháp học máy khác không?

Ví dụ:

(1) Sau đây là một ví dụ về xấp xỉ hàm và đạo hàm của nó: Một NN được đào tạo để học hàm f(x)= =x3+x+0,5 trong phạm vi [-3,2]: chức năng từ đó một xấp xỉ hợp lý to df(x)/dx thu được: đạo hàm Lưu ý rằng, như mong đợi, xấp xỉ NN với f(x) và đạo hàm đầu tiên của nó được cải thiện với số lượng điểm đào tạo, kiến ​​trúc NN, vì cực tiểu tốt hơn được tìm thấy trong quá trình đào tạo, v.v. .

(2) Sau đây là một ví dụ về xấp xỉ hàm và đạo hàm chức năng của nó: Một NN được đào tạo để tìm hiểu hàm F[f(x)]= =12dx f(x)2 . Dữ liệu huấn luyện đã thu được bằng cách sử dụng các hàm có dạngf(x)= =mộtxb , trong đómộtb được tạo ngẫu nhiên. Cốt truyện sau đây minh họa rằng NN thực sự có thể xấp xỉF[f(x)]khá tốt: chức năng Tuy nhiên, các dẫn xuất chức năng được tính toán là rác hoàn chỉnh; một ví dụ (cho một f(x) ) cụ thể được hiển thị bên dưới: phái sinh chức năng Như một lưu ý thú vị, xấp xỉ NN với F[f(x)] dường như được cải thiện với số lượng điểm đào tạo, v.v. (như trong ví dụ (1) ), nhưng đạo hàm chức năng thì không.


Câu hỏi thú vị. Làm thế nào bạn đại diện cho đầu vào f của chức năng F? Tôi giả sử f đang được lượng tử hóa cho một số vectơ của giá trị f (giả sử là vectơ 1000 mẫu). Nếu vậy, trục x của âm mưu thứ ba của bạn có ý nghĩa gì? Nó dường như khác với trục x của âm mưu thứ 4 của bạn. Là mạng đang được đào tạo để học F [f] và dF / df, hay bạn đang tính toán dF / df sau khi mạng được đào tạo?
Christian Bueno

Câu trả lời:


3

Đây là một câu hỏi hay. Tôi nghĩ rằng nó liên quan đến bằng chứng toán học lý thuyết. Tôi đã làm việc với Deep Learning (về cơ bản là mạng lưới thần kinh) trong một thời gian (khoảng một năm), và dựa trên kiến ​​thức của tôi từ tất cả các bài báo tôi đọc, tôi chưa thấy bằng chứng nào về điều này. Tuy nhiên, về mặt bằng chứng thực nghiệm, tôi nghĩ rằng tôi có thể cung cấp một phản hồi.

Hãy xem xét ví dụ này dưới đây:

nhập mô tả hình ảnh ở đây

Trong ví dụ này, tôi tin rằng thông qua mạng nơ ron nhiều lớp, nó có thể học cả f (x) và F [f (x)] thông qua truyền ngược. Tuy nhiên, cho dù điều này áp dụng cho các chức năng phức tạp hơn, hoặc tất cả các chức năng trong vũ trụ, nó đòi hỏi nhiều bằng chứng hơn. Tuy nhiên, khi chúng tôi xem xét ví dụ về cạnh tranh Imagenet --- để phân loại 1000 đối tượng, một mạng lưới thần kinh rất sâu thường được sử dụng; mô hình tốt nhất có thể đạt được tỷ lệ lỗi đáng kinh ngạc đến ~ 5%. NN sâu như vậy chứa hơn 10 lớp phi tuyến tính và đây là bằng chứng thực nghiệm cho thấy mối quan hệ phức tạp có thể được biểu diễn thông qua mạng sâu [dựa trên thực tế là chúng ta biết NN có 1 lớp ẩn có thể tách dữ liệu phi tuyến tính].

Nhưng liệu TẤT CẢ các dẫn xuất có thể được học đòi hỏi nhiều nghiên cứu hơn.

Tôi không chắc chắn nếu có bất kỳ phương pháp học máy có thể học chức năng và đạo hàm của nó hoàn toàn. Xin lỗi vì điều đó.


Cảm ơn về câu trả lời của bạn. Ban đầu tôi thực sự hơi ngạc nhiên khi một mạng lưới thần kinh có thể xấp xỉ một chức năng. Mặc dù chấp nhận thực tế là nó có thể, nhưng sau đó, bằng trực giác dường như thông tin về đạo hàm chức năng của nó phải được chứa trong giải pháp (như trường hợp của các hàm), đặc biệt là đối với các hàm và hàm đơn giản (như trong ví dụ của bạn) trong thực tế, Tuy nhiên, đây không phải là trường hợp. Trong ví dụ của bạn, tôi đã thêm một số ví dụ vào bài viết gốc của mình.
Michael

Thật tuyệt, cài đặt cho mạng thần kinh của bạn là gì? Chẳng hạn như số lớp, đơn vị ẩn, chức năng kích hoạt, v.v.
RockTheStar

Tôi đã thử các cài đặt khác nhau: 1-3 lớp ẩn, 5 đến 100 đơn vị ẩn (mỗi lớp), số lượng đầu vào khác nhau (trong khi chức năng được xác định là giới hạn mà điều này đi đến vô cùng, tôi đã thử chỉ có bốn điểm) , sigmoid và tanh (bình thường, cũng như chức năng kích hoạt của LeCun) và các phương pháp đào tạo khác nhau (backpropagation, QRPROP, tối ưu hóa dòng hạt và các phương pháp khác). Tôi đã thử cả trong nhà và một số phần mềm nổi tiếng. Trong khi tôi có thể cải thiện gần đúng chức năng khi tôi thay đổi mọi thứ, tôi không thể trong đạo hàm chức năng.
Michael

Mát mẻ. Bạn đã sử dụng phần mềm nào? Bạn đã thực hiện xác nhận chéo để tối ưu hóa cài đặt mạng của mình chưa? Dưới đây là một số suy nghĩ của tôi: (1) Tôi có thể mong đợi 3 hoặc nhiều lớp ẩn có thể được yêu cầu vì sự cố rất phi tuyến tính, (2) cố gắng sử dụng cài đặt không đầy đủ cho các đơn vị ẩn, ví dụ: đầu vào-100-50-20 -output, thay vì đầu vào-20-50-100-output, (3) sử dụng ReLU thay vì sigmoid hoặc tanh; một nghiên cứu đã xuất bản một vài bài báo trong năm 2010 và chứng minh rằng ReLU có thể dẫn đến kết quả tốt hơn, (4) các thông số như giảm cân, tốc độ học tập rất quan trọng, đảm bảo bạn điều chỉnh chúng một cách thích hợp, (5)
caffe

Bên cạnh phần mềm nội bộ, tôi đã sử dụng các số liệu thống kê ++, Encog và NeuroSolutions (phần mềm này chỉ là bản dùng thử miễn phí và tôi không sử dụng nó nữa). Tôi chưa thử xác nhận chéo để tối ưu hóa mọi thứ, nhưng tôi sẽ; Tôi cũng sẽ thử các đề xuất khác của bạn. Cảm ơn bạn đã suy nghĩ của bạn.
Michael

3

Mạng lưới thần kinh có thể xấp xỉ ánh xạ liên tục giữa các không gian vectơ Euclide f:RMRNRN= =1


0

F[f(x)]= =mộtbf(x)g(x)dx
g(x)fTôi(x), Tôi= =0,Giáo dục,MF[fTôi(x)]
F[f(x)]= =Δx[f0g02+f1g1+...+fN-1gN-1+fNgN2]
F[f(x)]Δx= =y= =f0g02+f1g1+...+fN-1gN-1+fNgN2
f0= =một, f1= =f(x1), ..., fN-1= =f(xN-1), fN= =b,
một<x1<...<xN-1<b,  Δx= =xj+1-xj

MfTôi(x), Tôi= =1,Giáo dục,MTôi

F[fTôi(x)]Δx= =yTôi= =fTôi0g02+fTôi1g1+...+fTôi,N-1gN-1+fTôiNgN2

g0,Giáo dục,gN

X= =[f00/2f01Giáo dụcf0,N-1f0N/2f10/2f11Giáo dụcf1,N-1f1N/2Giáo dụcGiáo dụcGiáo dụcGiáo dụcGiáo dụcfM0/2fM1Giáo dụcfM,N-1fMN/2]
y= =[y0,Giáo dục,yM]

g(x)

import numpy as np 

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

x[một,b]

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

Chúng ta hãy lấy các sin và cosin với các tần số khác nhau làm chức năng đào tạo của chúng ta. Tính toán vectơ đích:

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

Bây giờ, ma trận hồi quy:

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

Hồi quy tuyến tính:

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()

nhập mô tả hình ảnh ở đâyg(x) bộ lọc Savitzky-Golay

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()

nhập mô tả hình ảnh ở đây

F[f(x)]f(x)

F[f(x)]= =mộtbL(f(x))dx
f0,f1Giáo dục,fNx
F[f(x)]= =mộtbL(f(x),f'(x))dx
f'f0,f1Giáo dục,fNLf0,f1Giáo dục,fN, người ta có thể cố gắng học nó bằng một phương pháp phi tuyến tính, ví dụ như mạng thần kinh hoặc SVM, mặc dù nó có thể sẽ không dễ dàng như trong trường hợp tuyến tính.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.