신경망이 기능 및 기능 파생을 배울 수 있습니까?


11

신경망 (NNs)은 특정 가정 (네트워크 및 근사 함수)에서 함수 및 그 파생어에 대한 보편적 근사기로 간주 될 수 있음을 이해합니다. 사실, 단순하지만 사소한 함수 (예 : 다항식)에 대해 여러 가지 테스트를 수행했으며 실제로 함수와 첫 번째 미분을 대략적으로 근사 할 수있는 것 같습니다 (예는 아래에 표시됨).

그러나 나에게 분명하지 않은 것은 위의 이론이 기능과 기능적 파생물로 확장되는지 (또는 확장 될 수 있는지)입니다. 예를 들어, 함수 : 함수 파생어 : 여기서, 전적으로, 비 사소 의존 . NN은 위의 매핑과 그 기능적 파생물을 배울 수 있습니까? 보다 구체적으로, 하나의 이산 도메인이 경우 위에 및 제공 입력하고 (이산 점)

에프[에프(엑스)]=엑스 에프(엑스)(엑스)
δ에프[에프(엑스)]δ에프(엑스)=(엑스)
에프(엑스)(엑스)엑스[,]에프(엑스)에프[에프(엑스)]출력으로, NN은 (적어도 이론적으로)이 매핑을 올바르게 배울 수 있습니까? 그렇다면 매핑의 기능적 파생물도 배울 수 있습니까?

나는 여러 가지 테스트를 수행했으며 NN이 실제로 매핑 를 어느 정도 배울 수있는 것 같습니다 . 그러나이 매핑의 정확성은 좋지만 크지는 않습니다. 그리고 문제는 계산 된 기능적 파생물이 완전한 쓰레기라는 것입니다 (둘 다 훈련과 관련된 문제와 관련이있을 수 있습니다). 아래에 예가 나와 있습니다.에프[에프(엑스)]

NN이 기능 및 기능 파생을 학습하기에 적합하지 않은 경우 또 다른 기계 학습 방법이 있습니까?

예 :

NN 함수의 내용은 훈련시켰다 : (1) 다음은 기능 및 그것의 유도체 근사화의 예 범위 [-3,2] 이상은 : 어떤 적당한 행 근사값을 얻습니다. 예상대로, 대한 NN 근사값 과 첫 번째 미분 값은 훈련 중에 더 나은 최소 점이 발견되는 등 훈련 포인트 수, NN 아키텍처를 통해 향상됩니다.에프(엑스)=엑스+엑스+0.5d f ( x ) / d x f ( x )함수에프(엑스)/엑스함수 파생에프(엑스)

(2) 다음은 함수와 함수 파생어를 근사화하는 예입니다. NN은 함수 를 배우도록 훈련되었습니다 . 훈련 데이터는 형식의 함수를 사용하여 얻었으며 , 여기서 와 는 무작위로 생성되었습니다. 다음 플롯 NN 참으로 근사 할 수 있다는 것을 나타낸다 아주 잘 : 계산치 기능성 유도체는, 그러나, 전체 가비지이고; (특정 )의 예는 다음과 같습니다. 흥미로운 참고로 NN 근사값은에프[에프(엑스)]=12엑스 에프(엑스)2에프(엑스)=엑스에프[에프(엑스)]f ( x ) F [ f ( x ) ]기능의에프(엑스)기능적 유도체에프[에프(엑스)] (예 (1)에서와 같이) 훈련 포인트의 수와 함께 향상되는 것처럼 보이지만 기능적 파생물은 그렇지 않습니다.


흥미로운 질문입니다. 함수 F의 입력 f를 어떻게 표현합니까? f가 f- 값의 일부 벡터 (즉 1000 샘플의 벡터)로 양자화되고 있다고 가정합니다. 그렇다면 세 번째 줄거리의 x 축은 무엇을 의미합니까? 네 번째 줄거리의 x 축과는 다른 것 같습니다. 네트워크가 F [f]와 dF / df를 배우도록 훈련되고 있습니까, 아니면 일단 네트워크가 훈련되면 dF / df를 계산하고 있습니까?
기독교 부에노

답변:


3

좋은 질문입니다. 나는 그것이 이론적 인 수학적 증거와 관련이 있다고 생각합니다. 나는 딥 러닝 (기본적으로 신경망)과 한동안 (약 1 년) 일해 왔으며, 읽은 모든 논문에서 얻은 지식을 바탕으로 아직 이것에 대한 증거를 보지 못했습니다. 그러나 실험적 증거 측면에서 피드백을 제공 할 수 있다고 생각합니다.

아래에서이 예를 살펴 보겠습니다.

여기에 이미지 설명을 입력하십시오

이 예에서, 나는 다층 신경망을 통해 믿으며, 역 전파를 통해 f (x)와 F [f (x)]를 모두 배울 수 있어야합니다. 그러나 이것이 더 복잡한 기능에 적용 되든 우주의 모든 기능에 적용 되든 더 많은 증명이 필요합니다. 그러나 1000 개의 물체를 분류하기 위해 Imagenet 경쟁 의 예를 고려할 때 매우 깊은 신경망이 종종 사용됩니다. 최고의 모델은 ~ 5 %의 놀라운 오류율을 달성 할 수 있습니다. 이러한 딥 NN에는 10 개 이상의 비선형 레이어가 포함되어 있으며 이는 딥 네트워크를 통해 복잡한 관계를 표현할 수 있다는 실험적 증거입니다.

그러나 모든 파생 상품을 배울 수 있는지 여부는 더 많은 연구가 필요했습니다.

함수와 그 파생어를 완전히 배울 수있는 기계 학습 방법이 있는지 확실하지 않습니다. 미안합니다.


답변 주셔서 감사합니다. 실제로 신경망이 기능에 거의 근접 할 수 있다는 사실에 처음에는 약간 놀랐습니다. 그러나 그것이 가능할 수 있다는 사실을 받아들이면, 기능적 파생물에 대한 정보가 솔루션에 포함되어야하고 (함수의 경우와 같이) 특히 간단한 기능과 기능 (예에서와 같이)에 실제로 포함되어야합니다. 실제로, 그러나 그렇지 않습니다. 귀하의 예에 비추어, 나는 원래 게시물에 몇 가지 예를 추가했습니다.
Michael

쿨, 신경망의 설정은 무엇입니까? 레이어 수, 숨겨진 단위, 활성화 기능 등
RockTheStar

다양한 설정을 시도했습니다 : 1-3 개의 숨겨진 레이어, 5 ~ 100 개의 숨겨진 단위 (레이어 당), 다양한 입력 수 (기능은 무한대로가는 한계로 정의되지만 4 점까지 시도했습니다) , sigmoid 및 tanh (LeCun에서 권장하는 것뿐만 아니라 정상) 활성화 기능 및 다양한 교육 방법 (역 전파, QRPROP, 입자 떼 최적화 및 기타). 사내 및 일부 잘 알려진 소프트웨어를 모두 시도했습니다. 변경 사항에 따라 기능을 근사화하는 데 개선이 가능하지만, 기능 파생은 불가능합니다.
Michael

멋있는. 어떤 소프트웨어를 사용하셨습니까? 네트워크 설정을 최적화하기 위해 교차 유효성 검사를 수행 했습니까? 내 생각 중 일부는 다음과 같습니다. (1) 문제가 매우 비선형이기 때문에 3 개 이상의 숨겨진 레이어가 필요할 것으로 예상됩니다. (2) 숨겨진 장치, 즉 입력 -100-50-20에 대해 불완전한 설정을 사용하십시오. 입력 -20-50-100 출력 대신-출력, (3) S 자형 또는 tanh 대신 ReLU를 사용; 연구는 2010 년대에 몇 가지 서류를 게시하고 ReLU 더 나은 결과로 이어질 수 있음을 입증, 체중 붕괴 등 (4) 매개 변수, 학습 속도가 중요하다 당신에게 반드시 적절하게 조정 그들을, 도구로 (5) CAFFE 만들기
RockTheStar

사내 소프트웨어 외에도 통계 ++, Encog 및 NeuroSolutions를 사용했습니다 (후자는 무료 평가판이므로 더 이상 사용하지 않습니다). 나는 아직 물건을 최적화하기 위해 교차 검증을 시도하지는 않았지만, 그럴 것이다. 나는 또한 당신의 다른 제안을 시도 할 것입니다. 당신의 생각에 감사합니다.
Michael

3

에프:아르 자형미디엄아르 자형아르 자형=1


0

에프[에프(엑스)]=에프(엑스)(엑스)엑스
(엑스)에프나는(엑스), 나는=0,,미디엄에프[에프나는(엑스)]
에프[에프(엑스)]=Δ엑스[에프002+에프11+...+에프11+에프2]
에프[에프(엑스)]Δ엑스=와이=에프002+에프11+...+에프11+에프2
에프0=, 에프1=에프(엑스1), ..., 에프1=에프(엑스1), 에프=,
<엑스1<...<엑스1<,  Δ엑스=엑스제이+1엑스제이

미디엄에프나는(엑스), 나는=1,,미디엄나는

에프[에프나는(엑스)]Δ엑스=와이나는=에프나는002+에프나는11+...+에프나는,11+에프나는2

0,,

엑스=[에프00/2에프01에프0,1에프0/2에프10/2에프11에프1,1에프1/2에프미디엄0/2에프미디엄1에프미디엄,1에프미디엄/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()

여기에 이미지 설명을 입력하십시오

에프[에프(엑스)]에프(엑스)

에프[에프(엑스)]=(에프(엑스))엑스
에프0,에프1,에프엑스
에프[에프(엑스)]=(에프(엑스),에프'(엑스))엑스
에프'에프0,에프1,에프에프0,에프1,에프아마 선형 네트워크처럼 쉽지는 않지만 신경망이나 SVM과 같은 비선형 방법으로 학습하려고 시도 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.