当前位置: 首页 > news >正文

神经网络模型的统计学具现

        之前写过一篇文章,把神经网络模型定义为就是对数据的多维度、多层次的统计学曲线计算过程,本文将具现一个简单的例子来描述这个过程。

        目前有A、B、C、D四个物体,已知如下信息,这些信息其实可以看作是训练的数据。

       D + A = 3

       D + B = 5

       D + C = 4

       A + C = 5

       B + C = 7

        训练之后,期待模型能够自动计算任意两个字母相加等于几?

        为了更好的说明这个过程,上面并没有给出冗余的和错误的学习信息量,从方程式来看,它其实具有唯一解A=2、B=4、C=3、D=1,但本文不从逻辑思维来解答这个题目,而是从统计学方法上来解答这个题目。

        假设每个字母只有一个纬度的信息量,假设A=1、B=2、C=3、D=4,这个类似神经网络模型,对输入的信息进行信息纬度的分类。

        而后采用神经网络的一层算法,我们知道D+A在已有的属性数值下,不可能等于3,所以要对属性数值进行变化,先简单的采用一个二次函数进行变化,定义本层如下的变换函数:

        

from scipy.optimize import curve_fitdef func_2(X, a, b, c):x, y = X  return (a*x*x+b*x+c)+(a*y*y+b*y+c)x=[4,4,4,1,2]
y=[1,2,3,3,3]
z=[3,5,4,5,7]popt, pcov = curve_fit(func_2, (x,y), z, p0=[1,1,1])print(popt)

运行上面的代码,能够得到统计学上最小结果误差的a,b,c的值:[-1.          4.69230767 -1.76923074]

所以这一层的转换函数为z=-(x*x+y*y)+4.69230767*(x+y)-2*1.76923074

把已知的几个xy代入可得如下结果:

3=z=-(4*4+1*1)+4.69230767*(4+1)-2*1.76923074=2.923

5=z=-(4*4+2*2)+4.69230767*(4+2)-2*1.76923074=4.615

4=z=-(4*4+3*3)+4.69230767*(4+3)-2*1.76923074=4.307

5=z=-(1*1+3*3)+4.69230767*(1+3)-2*1.76923074=5.230

7=z=-(2*2+3*3)+4.69230767*(2+3)-2*1.76923074=6.923

评估计算:6=A+B=-(1*1+2*2)+4.69230767*(1+2)-2*1.76923074=5.538

        可以看到,通过统计学评估出来的参数,能够让答案和真实接近,但是无法完全正确,那么具体往下的介绍,才是神经网络模型的核心。

        如何选择合适的函数,也就是把信息量如何进行变换,才能让结果更接近真实,下面我们更换一个函数:

        

from scipy.optimize import curve_fitdef func_3(X, a, b, c, d):x, y = X  return a*(x*x*x+y*y*y)+b*(x*x+y*y)+c*(x+y)+2*dx=[4,4,4,1,2]
y=[1,2,3,3,3]
z=[3,5,4,5,7]popt, pcov = curve_fit(func_3, (x,y), z, p0=[1,1,1,1])print(popt)

运行上面的代码,能够得到统计学上最小结果误差的a,b,c的值:[ 0.33333333 -3.5        10.16666667 -5.        ]

那么转换函数为z=0.33333333*(x*x*x+y*y*y)-3.5*(x*x+y*y)+10.16666667*(x+y)-2*5

把已知的几个xy代入可得如下结果:

3=z=0.33333333*(4*4*4+1*1*1)-3.5*(4*4+1*1)+10.16666667*(4+1)-2*5=2.9999997

5=z=0.33333333*(4*4*4+2*2*2)-3.5*(4*4+2*2)+10.16666667*(4+2)-2*5=4.9999997

4=z=0.33333333*(4*4*4+3*3*3)-3.5*(4*4+3*3)+10.16666667*(4+3)-2*5=3.9999997

5=z=0.33333333*(1*1*1+3*3*3)-3.5*(1*1+3*3)+10.16666667*(1+3)-2*5=4.99999992

7=z=0.33333333*(2*2*2+3*3*3)-3.5*(2*2+3*3)+10.16666667*(2+3)-2*5=6.9999999

评估计算:6=A+B=0.33333333*(1*1*1+2*2*2)-3.5*(1*1+2*2)+10.16666667*(1+2)-2*5=5.99999998

        可以看到,通过这个三次函数统计学评估出来的参数,能够让答案和真实基本一致。

        所以,如何定义函数,取决了定义模型的人,对数据维度信息和意义的了解,并且能够把这种了解转换到函数,是模型定义的根本。

        以上只是描述了连续函数和单一信息量,而对于现实中的实际模型,还会出现非连续函数以及多信息纬度(上百上千的维度)的情况,在这种情况下,作为一个神经网络模型定义师,需要能够有效的定义函数,并定义这个函数的输入信息量。

        如果采用非连续函数,只需要对数字1234到对应数字的转换,一个非连续函数即可,数据准确度可以达到100%。

       

        以上是通过一个简单二元曲线,通过一个三次函数,模拟了一个简单的神经网络层,通过统计函数完成了训练,并使用训练参数,对新的预期计算得到了正确的结果。

        希望本文能让各位对神经网络模型有进一步的认识。虽然真实使用会更复杂,但它的核心其实就是最优的函数统计系数。

        神经网络模型师,划分输入信息维度,定义各层的计算函数,通过训练,把这个函数的几万到几亿个的参数统计优化出来,而模型的推理,则是基于这些系数和函数,把输入转化到输出,从而得到结果。

相关文章:

  • 【MPC】模型预测控制笔记 (4):约束输出反馈MPC
  • crackme009
  • FPGA基础 -- Verilog 结构建模
  • 百度下拉框出词技术解密:72小时出下拉词软件原理分享
  • 零基础开始的网工之路第二十一天------性能优化
  • 从 native 获取 AndroidId,Frida 获取 native 堆栈
  • Vue.js第二节
  • 使用duckduckgo_search python api 进行免费且不限次数的搜索
  • 【unitrix】 3.1 新基本结构体(types1.rs)
  • Python从入门到精通
  • WebRTC(六):ICE协议
  • c++面试题(24)-----数组中出现次数超过一半的数字
  • VisionMaster标定板像素标定,测量尺寸以及opencv/C++实现
  • 【C语言极简自学笔记】重讲运算符
  • 自动打电话软件设计与实现
  • FPGA基础 -- Verilog行为级建模之alawys语句
  • FPGA基础 -- Verilog 行为级建模之条件语句
  • 爬虫技术:从数据获取到智能分析的进阶之路
  • Mac 安装 finalshell
  • WebFuture:PDF页面去掉下载按钮
  • 中国人才网登录入口/合肥全网优化
  • 什么是建设网站与靠前/广州百度关键词搜索
  • 网站加入收藏夹代码/互联网广告价格
  • 如皋网页设计/开封搜索引擎优化
  • 公司网站建设服务公司/小红书推广
  • 威海网站建设哪一家/谷歌账号