Чи може нейронна мережа засвоїти функціонал та його функціональну похідну?


11

Я розумію, що нейронні мережі (NN) можна вважати універсальними наближеннями як до функцій, так і до їх похідних, за певних припущень (як для мережі, так і для функції наближення). Насправді я зробив ряд тестів на простих, але нетривіальних функціях (наприклад, поліномах), і, схоже, я можу дійсно добре наблизити їх та їхні перші похідні (приклад наведено нижче).

Однак мені не зрозуміло, чи поширюються теореми, які призводять до вищезазначеного (або, можливо, можуть бути розширені) на функціонали та їх функціональні похідні. Розглянемо, наприклад, функціонал:

Ж[f(х)]=абгх f(х)г(х)
з функціональною похідною:
δЖ[f(х)]δf(х)=г(х)
деf(х)повністю і нетривіально залежить відг(х). Чи може НН дізнатися вищевказане відображення та його функціональну похідну? Більш конкретно, якщо дискретизує доменхнад[а,б]і надаєf(х)(у розрізнених точках) як вхідний іЖ[f(х)]Як вихід, чи може НН навчитися цьому картографуванню правильно (принаймні теоретично)? Якщо так, то чи може вона також вивчити функціональну похідну відображення?

Я зробив ряд тестів, і, схоже, NN дійсно може вивчити відображення Ж[f(х)] , певною мірою. Однак, хоча точність цього відображення нормальна, вона не велика; і хвилює те, що обчислювана функціональна похідна є повним сміттям (хоча і те, і інше може бути пов'язане з проблемами з навчанням тощо). Приклад наведено нижче.

Якщо NN не підходить для вивчення функціоналу та його функціональної похідної, чи існує інший метод машинного навчання, який є?

Приклади:

(1) Далі є прикладом наближення функції та її похідної: NN був навчений вивчати функцію f(х)=х3+х+0,5 у межах [-3,2]: функція з якого розумне наближення до гf(х)/гх виходить: похідна функції Зауважте, що, як очікувалося, наближення NN до f(х) та його перша похідна покращуються із кількістю навчальних балів, архітектури NN, оскільки кращі мінімуми виявляються під час тренування тощо .

(2) Далі є прикладом наближення функціоналу та його функціональної похідної: A NN був навчений вивчати функціонал Ж[f(х)]=12гх f(х)2 . Дані про навчання були отримані за допомогою функцій форми f(х)=ахб , де а і б були генеровані випадковим чином. Наступний сюжет ілюструє, що NN дійсно здатний наблизити Ж[f(х)]досить добре: функціональний обчислені функціональні похідні, однак, є повним сміттям; приклад (для конкретного f(х) ) наведено нижче: функціональна похідна Як цікава примітка, наближення NN до Ж[f(х)] схоже, покращується з кількістю навчальних балів тощо (як у прикладі (1) ), проте функціональна похідна не має.


Цікаве запитання. Як ви представляєте вхід f функціоналу F? Я припускаю, що f квантується на деякий вектор f-значень (скажімо, вектор з 1000 зразків). Якщо так, то що означає вісь x вашого третього сюжету? Здається, це відрізняється від осі x вашого четвертого сюжету. Чи навчається мережа для навчання F [f] та dF / df, чи ви обчислюєте dF / df, як тільки мережа навчається?
Крістіан Буено

Відповіді:


3

Це гарне запитання. Я думаю, що це передбачає теоретичні математичні докази. Я працював з «Глибоким навчанням» (в основному нейронною мережею) деякий час (близько року), і грунтуючись на моїх знаннях з усіх прочитаних робіт, я ще не бачив доказів про це. Однак, що стосується експериментального підтвердження, я думаю, що я можу надати зворотній зв'язок.

Розглянемо цей приклад нижче:

введіть тут опис зображення

У цьому прикладі, я вважаю, що через багатошарову нейронну мережу вона має бути здатна вивчити як f (x), так і F [f (x)] шляхом зворотного поширення. Однак, чи стосується це більш складних функцій чи всіх функцій у Всесвіті, це потребує більше доказів. Однак, коли ми розглянемо на прикладі конкуренції Imagenet --- для класифікації 1000 об'єктів, дуже часто використовується дуже глибока нейронна мережа; найкраща модель може досягти неймовірного показника помилок до ~ 5%. Такий глибокий NN містить більше 10 нелінійних шарів, і це є експериментальним доказом того, що складна взаємозв'язок може бути представлена ​​через глибоку мережу [виходячи з того, що ми знаємо, що NN з 1 прихованим шаром може відокремлювати дані нелінійно].

Але чи можна дізнатися ВСІ похідні, потрібно більше досліджень.

Я не впевнений, чи існують якісь методи машинного навчання, які б могли засвоїти функцію та її похідну повністю. Вибач за те.


Спасибі за вашу відповідь. Спочатку я трохи здивувався, що нейронна мережа взагалі може наближати функціонал. Приймаючи той факт, що він міг би хотіти, тоді інтуїтивно здається, що інформація про його функціональну похідну повинна міститися у рішенні (як це стосується функцій), особливо для простих функцій та функціоналів (як у вашому прикладі) На практиці, однак це не так. Зважаючи на ваш приклад, я додав кілька прикладів до своєї початкової публікації.
Майкл

Класно, яка настройка для вашої нейронної мережі? Такі як кількість шарів, приховані одиниці, функції активації тощо
RockTheStar

Я спробував різні налаштування: 1-3 прихованих шару, від 5 до 100 прихованих одиниць (за кожен шар), різні кількості вхідних даних (в той час як функціонал визначений як межа, що йде до нескінченності, я спробував лише чотири бали) , сигмоїдні та танг (нормальні, а також рекомендовані LeCun) функції активації та різні методи тренувань (зворотне розповсюдження, QRPROP, оптимізація рою частинок та інші). Я спробував як власне, так і відоме програмне забезпечення. Хоча я можу вдосконалитись у наближенні функціоналу, коли я змінюю речі, я не можу у функціональній похідній.
Майкл

Класно. Яке програмне забезпечення ви використовували? Ви зробили перехресну перевірку для оптимізації налаштувань мережі? Ось кілька моїх думок: (1) Я б очікував, що 3 або більше прихованих шарів, можливо, знадобляться, тому що проблема є вкрай нелінійною, (2) спробуйте використовувати неповні налаштування для прихованих одиниць, тобто input-100-50-20 -вивід, замість введення-20-50-100-вихід, (3) використовувати ReLU замість сигмоїдних або танх; У дослідженні було опубліковано декілька робіт у 2010-х роках, і доведено, що ReLU може призвести до кращого результату; (4) такі параметри, як зниження ваги, швидкість навчання, важливі, переконайтесь, що ви їх правильно налаштували, (5) кафе як інструмент
RockTheStar,

Окрім власного програмного забезпечення, я використовував статистику ++, Encog та NeuroSolutions (остання була лише безкоштовною пробною версією, і я її більше не використовую). Я ще не пробував перехресну перевірку, щоб оптимізувати речі, але буду; Я також спробую ваші інші пропозиції. Дякую за думки.
Майкл


0

Ж[f(х)]=абf(х)г(х)гх
г(х)fi(х), i=0,,МЖ[fi(х)]
Ж[f(х)]=Δх[f0г02+f1г1+...+fN-1гN-1+fNгN2]
Ж[f(х)]Δх=у=f0г02+f1г1+...+fN-1гN-1+fNгN2
f0=а, f1=f(х1), ..., fN-1=f(хN-1), fN=б,
а<х1<...<хN-1<б,  Δх=хj+1-хj

Мfi(х), i=1,,Мi

Ж[fi(х)]Δх=уi=fi0г02+fi1г1+...+fi,N-1гN-1+fiNгN2

г0,,гN

Х=[f00/2f01f0,N-1f0N/2f10/2f11f1,N-1f1N/2fМ0/2fМ1fМ,N-1fМN/2]
у=[у0,,уМ]

г(х)

import numpy as np 

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

х[а,б]

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

введіть тут опис зображенняг(х)

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

Ж[f(х)]=абL(f(х))гх
f0,f1,fNх
Ж[f(х)]=абL(f(х),f'(х))гх
f'f0,f1,fNLf0,f1,fN, можна спробувати вивчити це за допомогою нелінійного методу, наприклад, нейронних мереж або SVM, хоча це, ймовірно, буде не так просто, як у лінійному випадку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.