Stata 能做神经网络可以做什么吗

采纳数:0 获赞数:4 LV2

在我看来bp神经網络可以做什么是一种算法只要是算法就可以用任何软件工具(只要编译器或者解释器支持,cc++,pythonmatlab......)来进行实现,只是实现时的复杂程度有区别而已

你对这个回答的评价是

除了MATLAB能做BP神经网络可以做什么,还有其他什么软件能做

理论上编程语言都可以比如VB,C语言过程也都是建模、量化、运算及结果输出(图、表),但是matlab发展到现在集成了很多的工具箱,所以用的最为广泛用其他的就得是要从源碼开发入手了,何必舍近求远

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有別人想知道的答案。

    最近正在看吴军博士的一本书《數学之美》受到了很多启发,恶补了几天线性代数和高等数学趁着自己思路清晰,把自己对人工神经网络可以做什么的想法记录下来顺便推导一下公式。

    一场人工智能狂潮正在悄悄的到来也许要不了多久,各种智能产品将会环绕再我们的周围坐在智能汽车里,告訴它要去的地方自动驾驶技术就可以把你带到目的地,电视机也有智能芯片它能懂你的爱好和习惯,自动播放你想要看的节目诸如此类的场景,正在慢慢的到来促使这场革命的恰恰是深度学习的发展和计算机硬件水平的提升。

    深度学习本质上就是多层人工神经网络鈳以做什么废话不多说,我们来看看人工神经网络可以做什么

   “人工神经网络可以做什么”这个名字充满了科技感,那么它是用来做什么的呢定义出这样一个网络是为了解决什么问题?其实它就是来解决分类问题的人每天都在做分类问题,如红绿灯路口走还是不赱;今天下雨了,上班是骑车还是坐公交;晚上是吃火锅还是吃面条……这样一看分类问题构成了我们日常生活的全部。计算机学会做汾类问题就能拥有一些智能了。

    看下面一张图片我随便手写了几个数字。

    人识别这些数字一眼看过去就知道了计算机怎么识别这些數字呢?把每个数字的图切块转化为一个个N维向量,可以看做是N维空间中的点这些点就散落在其中。我们用三维空间来模拟一下:

       我們在需要在这个立方体上画出一个特殊的“分界线”就能区分这些数字了为了说明这个问题,我们简化一下区分两个数字0和1,这时候僦说到神经网络可以做什么了神经网络可以做什么本质上是一个带权重的有向图。我们来怎么解决这个问题

    假设图片0被向量化成二维姠量,用(x1x2)表示,我们用AC、AD、BC、BD、CE、CF、DE、DF表示连接节点间的权重

    如果Ye和0的误差比Yf和1的误差小,那么图片就被识别为了0识别正确,實际上不可能权重不可能一次就准确,那么这时候就需要误差反向传播来调整权重了。

    在调整权重之前我们还是看看上面的权重计算都是线性的,在空间中画的分界线都是线性的那么要分类复杂的模型,我们需要非线性的运算这时候我们需要激活函数了。常用的噭活函数有sigmoid 和tanh

  加上了激活函数后E、F的输出值分别就变成了:

    Ye和0、Yf和1需要有计算误差的方法,我们定义它损失函数通常用平方差函数作為损失函数,平方差函数如下:

    好了现在我们知道计算值Ye、Yf和目标值0、1之间的误差了,我们怎么能最快减小这个误差呢这个误差我们鈳以想象成山脚到山顶的距离,我们走上山顶需要一个步长这个步长可以起个名字,叫学习速率learning rate。

    那么问题来了怎么快速走到山顶,用梯度下降法走最陡的地方。怎么找最陡的地方把山当成一个曲面,求曲率最大的点

    接下来,求出几个偏导数就找到了曲率了。

    类推:C对CF、C对DE、C对DF、C对AC、C对AD、C对BC、C对BD求偏导数就可以更新所有权重了,这里会有复合函数那么需要用到链式法则了。

    好了这就是整个BP神经网络可以做什么的构建和训练过程,有足够的训练数据就可以训练一个可以分类的神经网络可以做什么了,语音识别、图像识別、自然语言处理中的文本分类等等都是这个原理

发布了53 篇原创文章 · 获赞 11 · 访问量 1万+

假设有如下这样一个问题:有1000个樣本每个样本有三个特征值,一个标签值想让你预测一下给定任意三个特征值组合,其y值是多少

这就是典型的多元线性回归。函数模型如下:

为了方便大家理解咱们具体化一下上面的公式,按照本系列文章的符号约定就是:

我们定义一个一层的神经网络可以做什么输入层为3或者更多,反正大于2了就没区别这个一层的神经网络可以做什么没有中间层,只有输出层而且只有一个神经元,并且神经え有一个线性输出不经过激活函数处理。亦即在下图中经过ΣΣ求和得到Z值之后,直接把Z值输出。

这样的一个神经网络可以做什么能莋什么事情呢?

假设一共有m个样本每个样本n个特征值,X就是一个n×mn×m的矩阵模样是这样紫的(n=3,m=1000亦即3行1000列):

单独看一个样夲是这样的:

x1x1表示第一个样本,x11x11表示第一个样本的一个特征值

有人问了,为何不把这个表格转一下变成横向是样本特征值,纵姠是样本数量那样好像更符合思维习惯?

确实是!但是在实际的矩阵运算时由于是Z=W?X+BZ=W?X+B,W在前面X在后面,所以必须是这个样子的:

假设每个样本X有n个特征向量上式中的W就是一个1×n1×n行向量,让每个w都对应一个x:

B是个单值因为只有一个神经元,所以只有一个bias每个鉮经元对应一个bias,如果有多个神经元它们都会有各自的b值。

由于我们只想完成一个回归(拟合)任务所以输出层只有一个神经え。由于是线性的所以没有用激活函数。

房价预测问题成为了机器学习的一个入门话题。我们也不能免俗但是,不要用美国的什么哆少平方英尺多少个房间的例子来说事儿了,中国人不能理解我们来个北京的例子!

影响北京房价的因素有很多,几个最重要的因子囷它们的取值范围是:

  • 朝向(在北方地区窗户面向阳光的房子要抢手一些):北=1,西=2东=3,南=4
  • 地理位置:二环三环,四环五环,六環分别取值为2,34,56,二环的房子单价最贵
  • 面积:40~120平米连续值

由于一些原因,收集的数据不能用于教学所以咱们根据以上规则创慥一些数据:

 
 


 
我们用传统的均方差函数: loss=12(Z?Y)2loss=12(Z?Y)2,其中Z是每一次迭代的预测输出,Y是样本标签数据我们使用所有样本参与训练,因此损失函数实际为:

其中的分母中有个2实际上是想在求导数时把这个2约掉,没有什么原则上的区别
 
求解W和B的梯度方法与我们前面的文章“单叺单出的一层神经网络可以做什么”完全一样,所以不再赘述只说一下结论:
因为:


所以我们用loss的值作为基准,去求w对它的影响也就昰loss对w的偏导数:


 
 
 
 
 
 
怎么会overflow呢?于是右手的颤抖没有停止左手也开始颤抖了。
我们遇到了传说中的梯度爆炸!数值太大导致计算溢出了。苐一次遇到这个情况但相信不会是最后一次,因为这种情况在神经网络可以做什么中太常见了技术只服务于相信技术的人,技能只给與培养技能的人!别慌让我们debug一下。

检查迭代中的数值变化情况

 
先把迭代中的关键值打印出来:
 
最开始的W,B的徝都是0三次迭代后,W,B的值已经大的超乎想象了可以停止运行程序了,想一想为什么
难道是因为学习率太大吗?目前是0.1设置成0.01试试看:
 

回想一个问题:为什么在“单入淡出的一层神经网络可以做什么”一文的代码中,我们没有遇到这种情况因为所有的X值都是在[0,1]之间嘚,而神经网络可以做什么是以样本在事件中的统计分布概率为基础进行训练和预测的也就是说,样本的各个特征的度量单位要相同峩们并没有办法去比较1米和1公斤的区别,但是如果我们知道了1米在整个样本中的大小比例,以及1公斤在整个样本中的大小比例比如一個处于0.2的比例位置,另一个处于0.3的比例位置就可以说这个样本的1米比1公斤要小。这就提出了样本的归一化或者正则化的理论

 
更多的数据归一化的问题,我们会另文给出下面只提对我们解决当前问题有用的方法。

 
也叫离差标准化是对原始数据的线性變换,使结果落到[0,1]区间转换函数如下:

其中max为样本数据的最大值,min为样本数据的最小值
如果想要将数据映射到[-1,1],则将公式换成:


mean表示數据的均值

 
再把这个表拿出来分析一下:
样本特征值1:窗户朝向
样本特征值2:地理位置
样本特征值3:居住面积
样本标签值y:房價(万元)
  • 特征值1 - 窗户朝向
    一共有”东”“南”“西”“北“四个值,用数字化表示是:
    因为超南的房子比较贵其次为东,西北。为啥东仳西贵因为夏天时朝西的窗户西晒时间长,比较热

  • 特征值2 - 地理位置
    二环:2 - 单价最贵
    六环:6 - 单价最便宜

  • 特征值3 - 房屋面积
    统计所有样本数據得到房屋的面积范围是[40,120]

我们用min-max标准化来归一以上数据,得到下表:

样本特征值1:窗户朝向 0
样本特征值2:地理位置 0
样本特征值3:居住面积
樣本标签值y:房价(万元)

还有一个问题:标签值y是否需要归一化没有任何理论说需要归一化标签值,所以我们先把这个问题放一放

下图展示了归一化前后的情况,左侧为前右侧为后:

房屋面积的取值范围是[40,120],而地理位置的取值范围是[2,6]二者会形成一个佷扁的椭圆,如左侧这样在寻找最优解的时候,过程会非常曲折运气不好的话,如同我们上面的代码根本就没法训练。

归一化后哋理位置和房屋面积二者都归一到[0,1]之间,变成了可比的了而且寻找最优解的路径也很直接,节省了时间

我们把归一化的函数写好:

 
然后再改一下主程序,加上归一化的调用:
 
用颤抖的双手同时按下Ctrl+F5运行开始,结束一眨眼!仔细看打印结果:
 



什么鬼!怎麼相差这么多?!
仔细想想训练居然收敛了,出结果了但是和我们预期的不太一致。我们没有做归一化前根本没结果。归一化后有結果那么就是归一化起作用了,但它有什么副作用呢一起逐个分析一下4个值。



是不是和w1=2这个值非常的接近呢!WoW!我从澡盆里跳了出來,给阿基米德打了一个电话说:“我找到啦!”




 
其中W_num是在调用Normalize函数时返回的三个特征值的范围,亦即(3,4,79)
再看b值......"元芳,你怎么看"
“卑職以为,b值不是样本值没有经过归一化。”
“你说得很对!但我们怎么解出b呢”
“大人,这个好办我们如此这样这样......把一堆样本值玳入w1,w2,w3的公式,令b=0看看计算出来的结果是什么,再和样本标签值去比较就可以了!”

为了避免单个的样本误差用100个样本做比较,得到差徝之和再平均,代码如下:
 
我们在计算z的时候故意把第三个参数设置为0,即令b=0ym是每个样本的标签值,它与z的差值自然就是真正的b值
上述两段代码得到的输出如下:
 
至此,我们完美地解决了北京地区的房价预测问题!但是还没有解决自己可以有能力买一套北京的房子嘚问题......
最后遗留一个问题如果标签值y也归一化的话,也可以得到训练结果但是怎么解释呢?大家有兴趣的话可以研究一下分享出来。反正笔者是没研究出来




我要回帖

更多关于 神经网络可以做什么 的文章

 

随机推荐