神经网络是如何拟合任意函数的

一个最原始粗暴的拟合任意函数的思路,是将函数切成很多段线性函数,之后用逻辑门控制当x在哪一个区间时,某些逻辑门被激活,对应的线性函数的权重w与偏移量b在逻辑门的包裹下变成非0,计算出y在这一段的输出值。

需要推导出拟合函数y=f(x)需要哪些逻辑门,以及如何使用神经网络构建这些逻辑门。

首先最简单的是开关门:

${s^{(1)}}(x) = t{\rm{ = Relu}}({\rm{1 - 1000*Relu}}({\rm{u}}))$

使用Relu激活函数构建的开关门比起使用sigmoid函数构建的开关门

${s^{(1)}}(x) = {\rm{\sigma (1000x)}}$

的作用是相同的,都是让x>0时t=1,否则t=0

通过平移技巧:f(x-p)等价于f(x)平移+p距离,可以指定门的位置。

接下来是将开关门进行与/或组合,得到的门。

假如t1负责激活x>6, t3负责激活x>9,那么定义t2 = t1 and (not t3) =  ${s^{(1)}}( t1 - t3)$ ,即可用t2描述 6<x<=9的区间。

类似的,也可以定义t4 = t1 or t3 =

考虑任意函数,都可以被近似为多段线性函数。简便起见,假设三段线性函数的两个分割点是x=6以及x=9

b是偏移量,t是激活门,当x落在对应分段区间i内,激活门  t_i=1,否则t_i = 0

y的值可以分拆成ws的值与bt的值。下面画出了bt与s的值。

满足上述t条件的公式有:

${t_i}{\rm{ =  Relu(1 -  1000 * Relu(}}{{\rm{u}}_i}{\rm{)) }}$ 对于i=1, 2, 3

${u_1} =  - 1000x + 6000$

${u_2} = 1000x - 9000$

${u_3} =  - 1000{t_1} - 1000{t_3} + 500$

这里通过Relu函数外加一层线性权重(w=-1000, b=1)构成了一个开关门 Relu(1-1000*Relu(x))。门的位置通过一层线性函数平移变换确定。

时间: 2024-10-15 10:24:24

神经网络是如何拟合任意函数的的相关文章

关于神经网络拟合任意函数的讨论

参考这篇文章: https://www.cnblogs.com/yeluzi/p/7491619.html 从这篇文章看, 1. 文章里面讨论的是两层隐藏层的,但是实际上一层网络就能拟合任意函数 2. 实际工作上,深的还是更好. 原文地址:https://www.cnblogs.com/charlesblc/p/8494079.html

最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)

1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*rand(1,size(y,2)); %%最小二乘拟合 xf=log(x); yf=yrand; xfa = [ones(1,size(xf,2));xf] w = inv(xfa*xfa')*xfa*yf';%直接拟合得到的结果 参考资料: 1.http://blog.csdn.net/lotus_

定积分(任意函数求积分)

1 #define eps 1e-8 2 3 double fun(double x) { 4 /*函数部分*/ 5 } 6 7 double Definite_Integral(double a, double b) { 8 double p = eps + 1.0; 9 double t, h = b - a, t1 = (fun(a) + fun(b)) * h / 2; 10 while(p >= eps) { 11 double s = 0; 12 for(double k = a +

Matlab 最小二乘法拟合非线性函数

1.最小二乘原理 参考资料: 1.http://blog.csdn.net/lotus___/article/details/20546259 2.http://blog.sina.com.cn/s/blog_5404ea4f0101afth.html 2.matlab实现最小二乘法 利用matlab的最小二乘拟合函数对非线性函数进行拟合,具体地拟合的函数: [q r] = lsqcurvefit(fun, q_0, xdata, ydata);输入参数:fun:需要拟合的函数,假定有n个需要拟

tensorflow神经网络拟合非线性函数

本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np import matplotlib.pyplot as plt plotdata = { "batchsize":[], "loss":[] } d

对任意函数求导的sas模拟

*模拟求导 步长一定要比阈值小,才能得出准确的结果; data Derivation (keep=interval slope); * function y = 1/x only concern about x>0; deltaX = 1e-6; *割线变为切线时x1减小的步长; x0 = 2; y0 = 0; %function(y0,x0);*需要求导的点; put y0; slope = 0; *需要求得的斜率,即倒数; interval = 5; *x0与x1的在x轴的间距,也是判定停止

神经网络为什么要用sigmoid函数?为什么要映射到0-1之间?

(1)对于深度神经网络,中间的隐层的输出必须有一个激活函数.否则多个隐层的作用和没有隐层相同.这个激活函数不一定是sigmoid,常见的有sigmoid.tanh.relu等. (2)对于二分类问题,输出层是sigmoid函数.这是因为sigmoid函数可以把实数域光滑的映射到[0,1]空间.函数值恰好可以解释为属于正类的概率(概率的取值范围是0~1).另外,sigmoid函数单调递增,连续可导,导数形式非常简单,是一个比较合适的函数 (3)对于多分类问题,输出层就必须是softmax函数了.s

神经网络于过拟合

"Small" neural network (fewer parameters; more prone to underfitting) Computationally cheaper "Large" neural network (more parameters; more prone to overfitting) Computationally more expensive. Use regularization (λ) to address overfit

如何用12864液晶显示图片和绘制任意函数图象(打点)

一. 显示图片 显示图片的要点在于:1.取模 2.利用扩展指令设置液晶3.清楚液晶地址的概念 1.1取模 取模软件用的是"字模221"下图是他的参数设置 这里对参数设置先解释一下,所谓横向取模就是,一张图片从图片最左上角的8位开始取模,从左向右,每次取8位二进制数据转化为16进制保存,第一排取完之后,接着到第二排最左边8位开始取模,以此类推.为什么要这样取模呢?因为12864液晶的横纵坐标就是这个取模顺序,这点在之后还会详细提到. 1.2液晶的设置 液晶显示图片必须用扩充指令集,初始化