เครือข่ายประสาทสามารถเรียนรู้การทำงานและการทำงานของมันได้หรือไม่


11

ฉันเข้าใจว่าเครือข่ายนิวรัล (NNs) สามารถพิจารณาได้ว่าเป็นผู้ประมาณสากลสำหรับฟังก์ชั่นและอนุพันธ์ภายใต้สมมติฐานบางประการ (ทั้งเครือข่ายและฟังก์ชั่นโดยประมาณ) ในความเป็นจริงฉันได้ทำการทดสอบจำนวนมากเกี่ยวกับฟังก์ชั่นที่เรียบง่าย แต่ไม่สำคัญ (เช่นพหุนาม) และดูเหมือนว่าฉันสามารถประมาณพวกเขาและอนุพันธ์อันดับแรกได้เป็นอย่างดี (ตัวอย่างแสดงไว้ด้านล่าง)

อย่างไรก็ตามสิ่งที่ไม่ชัดเจนสำหรับฉันคือว่าทฤษฎีบทที่นำไปสู่การขยาย (หรืออาจจะขยาย) ไปยัง functionals และอนุพันธ์การทำงานของพวกเขา ลองพิจารณาตัวอย่างเช่นการใช้งาน:

F[f(x)]=abdx f(x)g(x)
ด้วยการใช้งานอนุพันธ์:
δF[f(x)]δf(x)=g(x)
ที่f(x)ขึ้นอยู่ทั้งหมดและไม่ใช่นิดบนg(x)) NN สามารถเรียนรู้การทำแผนที่ด้านบนและอนุพันธ์ของหน้าที่ได้หรือไม่ โดยเฉพาะอย่างยิ่งหากมีใครแยกโดเมนxมากกว่า[a,b]และให้f(x)(ที่จุดที่ไม่น่าสนใจ) เป็นอินพุตและF[f(x)]ในฐานะที่เป็นเอาท์พุท NN สามารถเรียนรู้การทำแผนที่นี้อย่างถูกต้อง (อย่างน้อยในทางทฤษฎี)? ถ้าเป็นเช่นนั้นมันสามารถเรียนรู้อนุพันธ์ของการทำแผนที่ได้หรือไม่

ฉันได้ทำการทดสอบหลายครั้งและดูเหมือนว่า NN อาจเรียนรู้การแมปF[f(x)]ได้ในระดับหนึ่ง อย่างไรก็ตามในขณะที่ความถูกต้องของการทำแผนที่นี้ก็โอเค แต่ก็ไม่ได้ยอดเยี่ยม และที่น่าเป็นห่วงก็คืออนุพันธ์ของฟังก์ชันที่คำนวณได้นั้นเป็นขยะที่สมบูรณ์ (ทั้งสองอย่างนี้อาจเกี่ยวข้องกับปัญหาในการฝึกอบรมและอื่น ๆ ) ตัวอย่างที่แสดงด้านล่าง

ถ้า NN ไม่เหมาะสำหรับการเรียนรู้ฟังก์ชั่นและอนุพันธ์ของฟังก์ชั่นนั้นจะมีวิธีการเรียนรู้ด้วยเครื่องอื่นหรือไม่

ตัวอย่าง:

(1) ต่อไปนี้เป็นตัวอย่างของการประมาณฟังก์ชั่นและอนุพันธ์ของมัน: A NN ได้รับการฝึกฝนให้เรียนรู้ฟังก์ชั่นf(x)=x3+x+0.5ในช่วง [-3,2]: ฟังก์ชัน ซึ่งเป็นการประมาณที่สมเหตุสมผล ถึงdf(x)/dxได้รับ: ฟังก์ชั่นอนุพันธ์ โปรดทราบว่าตามที่คาดไว้การประมาณ NN เป็นf(x)และอนุพันธ์อันดับแรกปรับปรุงด้วยจำนวนคะแนนการฝึกอบรมสถาปัตยกรรม NN เนื่องจากพบ minima ที่ดีขึ้นในระหว่างการฝึกอบรมเป็นต้น .

F[f(x)]=12dx f(x)2f(x)=axbabF[f(x)]การทำงานf(x)อนุพันธ์เชิงหน้าที่F[f(x)]


คำถามที่น่าสนใจ คุณเป็นตัวแทนของอินพุต f ของฟังก์ชั่น F อย่างไร ฉันสมมติว่า f กำลังหาจำนวนเวกเตอร์ของค่า f (พูดว่าเวกเตอร์ของ 1,000 ตัวอย่าง) ถ้าเป็นเช่นนั้นแกน x ของโครงร่างที่สามของคุณหมายถึงอะไร? ดูเหมือนว่าจะแตกต่างจากแกน x ของพล็อตที่ 4 ของคุณ เครือข่ายที่ได้รับการฝึกฝนเพื่อเรียนรู้ F [f] และ dF / df หรือคุณกำลังคำนวณ dF / df เมื่อเครือข่ายได้รับการฝึกอบรมหรือไม่
Christian Bueno

คำตอบ:


3

นี่เป็นคำถามที่ดี ฉันคิดว่ามันเกี่ยวข้องกับการพิสูจน์ทางคณิตศาสตร์ในเชิงทฤษฎี ฉันทำงานกับ Deep Learning (เครือข่ายประสาทโดยทั่วไป) มาระยะหนึ่ง (ประมาณหนึ่งปี) และจากความรู้ของฉันจากเอกสารทั้งหมดที่ฉันอ่านฉันยังไม่เห็นข้อพิสูจน์เกี่ยวกับเรื่องนี้ อย่างไรก็ตามในแง่ของหลักฐานการทดลองฉันคิดว่าฉันสามารถให้ข้อเสนอแนะ

ลองพิจารณาตัวอย่างด้านล่างนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ในตัวอย่างนี้ฉันเชื่อว่าผ่านเครือข่ายประสาทหลายชั้นควรจะสามารถเรียนรู้ทั้ง f (x) และ F [f (x)] ผ่านทางการเผยแพร่กลับ อย่างไรก็ตามไม่ว่าสิ่งนี้จะนำไปใช้กับฟังก์ชั่นที่ซับซ้อนมากขึ้นหรือฟังก์ชั่นทั้งหมดในจักรวาลจะต้องมีการพิสูจน์เพิ่มเติม อย่างไรก็ตามเมื่อเราพิจารณาตัวอย่างของการแข่งขัน Imagenet --- เพื่อจัดประเภทวัตถุ 1,000 ชิ้นมักใช้เครือข่ายประสาทที่ลึกมาก รุ่นที่ดีที่สุดสามารถบรรลุอัตราความผิดพลาดอย่างไม่น่าเชื่อถึง ~ 5% NN ที่ลึกดังกล่าวมีเลเยอร์ที่ไม่ใช่เชิงเส้นมากกว่า 10 เลเยอร์และนี่คือหลักฐานการทดลองที่ความสัมพันธ์ที่ซับซ้อนสามารถแสดงผ่านเครือข่ายที่ลึก [ขึ้นอยู่กับความจริงที่ว่าเรารู้ว่า NN กับ 1 เลเยอร์ที่ซ่อนอยู่สามารถแยกข้อมูลที่ไม่ใช่เชิงเส้น

แต่การเรียนรู้เพิ่มเติมว่าต้องเรียนรู้อนุพันธ์ทั้งหมดหรือไม่

ฉันไม่แน่ใจว่ามีวิธีการเรียนรู้ด้วยเครื่องจักรใด ๆ ที่สามารถเรียนรู้ฟังก์ชั่นและอนุพันธ์ของมันได้อย่างสมบูรณ์ ขอโทษด้วยกับเรื่องนั้น.


ขอบคุณสำหรับคำตอบ. ในตอนแรกฉันรู้สึกประหลาดใจเล็กน้อยที่เครือข่ายประสาทสามารถทำงานได้โดยประมาณ การยอมรับความจริงที่ว่ามันสามารถทำได้ แต่จากนั้นก็ดูเหมือนว่าข้อมูลเกี่ยวกับอนุพันธ์เชิงหน้าที่ของมันควรจะอยู่ในการแก้ปัญหา (เช่นกรณีที่มีฟังก์ชั่น) โดยเฉพาะอย่างยิ่งสำหรับฟังก์ชั่นที่ง่ายและ functionals อย่างไรก็ตามนี่ไม่ใช่กรณี จากตัวอย่างของคุณฉันได้เพิ่มตัวอย่างบางอย่างในโพสต์ดั้งเดิมของฉัน
Michael

เยี่ยมมากการตั้งค่าสำหรับเครือข่ายประสาทของคุณคืออะไร เช่นจำนวนเลเยอร์, ​​หน่วยที่ซ่อนอยู่, ฟังก์ชั่นการเปิดใช้งานเป็นต้น
RockTheStar

ฉันได้ลองตั้งค่าต่าง ๆ แล้ว: 1-3 เลเยอร์ที่ซ่อน, 5 ถึง 100 หน่วยที่ซ่อน (ต่อเลเยอร์), จำนวนอินพุตต่าง ๆ (ในขณะที่ฟังก์ชั่นถูกกำหนดเป็นขีด จำกัด ที่สิ่งนี้จะไปถึงอินฟินิตี้, ฉันได้ลองน้อยสี่จุด) sigmoid และ tanh (ปกติรวมถึงฟังก์ชั่นการเปิดใช้งานที่แนะนำโดย LeCun) และวิธีการฝึกอบรมต่าง ๆ (backpropagation, QRPROP, การเพิ่มประสิทธิภาพจับกลุ่มอนุภาคและอื่น ๆ ) ฉันลองทั้งซอฟต์แวร์ที่เป็นที่รู้จักและดี แม้ว่าฉันจะได้รับการปรับปรุงในการประมาณฟังก์ชั่นขณะที่ฉันเปลี่ยนสิ่งต่าง ๆ แต่ฉันไม่สามารถใช้อนุพันธ์เชิงหน้าที่ได้
Michael

เย็น. คุณใช้ซอฟต์แวร์อะไร คุณได้ทำการตรวจสอบข้ามเพื่อเพิ่มประสิทธิภาพการตั้งค่าเครือข่ายของคุณหรือไม่? นี่คือความคิดของฉัน: (1) ฉันคาดหวัง 3 ชั้นหรือมากกว่านั้นอาจจำเป็นต้องใช้เลเยอร์ที่ซ่อนอยู่เนื่องจากปัญหาไม่เป็นเชิงเส้นสูง (2) พยายามใช้การตั้งค่าที่ไม่สมบูรณ์สำหรับหน่วยที่ซ่อนอยู่เช่น input-100-50-20 - เอาท์พุทแทน input-20-50-100-output, (3) ใช้ ReLU แทน sigmoid หรือ tanh; งานวิจัยตีพิมพ์เอกสารไม่กี่ฉบับในปี 2010 และพิสูจน์ว่า ReLU สามารถนำไปสู่ผลลัพธ์ที่ดีกว่า (4) พารามิเตอร์เช่นน้ำหนักตัวลดลงอัตราการเรียนรู้มีความสำคัญตรวจสอบให้แน่ใจว่าคุณได้ปรับมันอย่างเหมาะสม (5) caffe เป็นเครื่องมือ
RockTheStar

นอกจากซอฟต์แวร์ภายใน บริษัท ฉันใช้สถิติ ++, Encog และ NeuroSolutions (อันหลังนี้เป็นเพียงการทดลองใช้ฟรีและฉันจะไม่ใช้อีกต่อไป) ฉันยังไม่ได้ลองตรวจสอบข้ามเพื่อเพิ่มประสิทธิภาพของสิ่งต่าง ๆ แต่ฉันจะ; ฉันจะลองทำตามคำแนะนำอื่น ๆ ของคุณ ขอบคุณสำหรับความคิดของคุณ
Michael


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

ตอนนี้เมทริกซ์ regressor:

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

ป้อนคำอธิบายรูปภาพที่นี่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.