神经网络和深度学习(一)
来源:互联网 发布:刷qq会员软件 编辑:程序博客网 时间:2024/05/29 14:20
这两天看了 Neural Networks and Deep Learning 网上在线书目的第一章的内容 和 斯坦福大学 《机器学习》的公开课,学习了两种主要的神经网络结构和机器学习中重要的算法——随机梯度下降算法。现在总结如下:
一个计算模型要划分为神经网络,通常需要大量彼此连接的节点(神经元),具有两个特特性:
1.每个神经元通过某种特定的输出函数(或称 激励函数 activation function)计算处理来自其他相邻神经元的加权输入值
2.神经元之间的信息传递的强度,用所谓加权值来定义,算法不断自我学习,调整权值weights
在此基础上,神经网络的计算模型,依靠大量的数据来训练。
几个概念:
cost function(成本函数) : 用来定量评估根据特定输入值计算出来的输出结果,离正确值的偏差
learning algorithm : 根据cost function的结果,自我纠正,最快找到神经元之间的最优化的weights权重
神经元Perceptron :
图1 Perceptron neuron
其中x1, x2, x3 为inputs ,且必须为二进制数字(0 or 1),outputs 也是只有二进制输出。w 为计算权重,这个w设计是重点也是难点。其中计算公式如下:
简化公式, ,其中w 和 x 分别代表权重和输入向量 ,用 偏置 b= -threshold,
神经元Sigmoid :
图2 Sigmoid neurons
比较percrptron 神经元和 Sigmoid神经元,发现他们的结构是一样的,但是对于inputs取值不同,Sigmoid 神经元的Inputs 可以取0~1中的任意值,而且输出值不是0 or 1, 而是 ,这里σ 被称为 sigmoid 函数,定义如下:
所以,inputs为x1, x2, ..., weights w1, w2,..., bias b 所对应的sigmoid neuron 的输出为:
根据公式,可以得到sigmoid 函数的响应曲线,如下
神经网络的架构
如上图所示,神经网络架构包括输入层、输出层和隐藏层。这种多层网络被称为 multilayer perceptrons or MLPs 。
梯度下降算法(gradient descent):
为了能够检验对于所有的训练输入值x,我们选择的weihts权重 和 biases偏置 使得输出值都近似和 y(x) 相等,使用了一个cost function(成本函数 or loss or objective function):
其中,w 代表网络中所有权重的集合,b 代表所有的偏置,n 是训练输入的总数目,a 是输出向量(依赖于x 、w、b)
如果C(w,b) ≈ 0 , 那么 对于所有的training inputs x, y(x) 约等于output a .非常好
如果 C(w,b) 非常大,那么说明 对于很多inputs ,y(x)不收敛到outputs a。
我们训练算法的目的是minimize 函数C(w,b),换句话说,我们想要找到一系列的w(权重)和b(偏置),使得 C(w,b) 尽可能的小。
我们使用的算法 就是 梯度下降算法。
我们要找到上图中的最低值,使用的方法是高数中的【梯度】,就是用来求变化率最大的地方,也即是沿着哪个方向,C(w,b)的值下降最快,这就是梯度下降算法的核心思想。(此处用v1, v2来代表w 和 b)
∆v1 和∆v2 分别代表在v1方向和v2方向上的变化量, ∆C表示C(v1,v2)的变化量
我们现在的想法是 找到合适的∆v1 、∆v2 使得∆C为负值,这样 C就向着变小的方向变化了。
定义 梯度向量:
此时,公式(7)可以重新表示如下:
我们令
其中η 是一个小的正参数(被称为 学习率)
可以得到新公式:
然后 我们可以不断更新:
如何将梯度下降算法应用在神经网络中呢?就是用梯度下降算法来不断寻找、纠正权重w 和 偏置b 来使得等式(6)取得最小值。公式如下:
随机梯度下降算法(Stochastic Gradient Descent)
为了解决梯度下降算法训练样本输入数据太大,学习速度太慢的问题,来加速学习,产生了一种新的算法是随机梯度下降算法。这个算法通过随机选择一定的训练输入样本来计算出一个 来代表梯度。
其中,m为随机选取的输入样本数量。 标记X1, X2,...,Xm 称作 mini-batch。
可以得到:
应用如上网络 进行 简单的手写数字识别 的代码实现
抓紧时间充电——面向对象的编程C++ / Python、神经网络知识体系架构!
阅读全文
0 0
- 神经网络和深度学习简史(一)
- 神经网络和深度学习(一)
- 神经网络和深度学习简史(一)
- 神经网络和深度学习(一)
- 神经网络和深度学习笔记(一)
- 神经网络和深度学习(一)——初识神经网络
- 深度学习(一):神经网络和反向传播
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络
- 吴恩达神经网络和深度学习课程自学笔记(一)之深度学习概论
- 深度学习基础(一)神经网络
- 深度学习笔记(一)---神经网络
- 神经网络与深度学习(一)
- 深度学习之神经网络入门(一)
- 深度学习—卷积神经网络(一)
- 从神经网络到深度学习(一 )
- 从零开始深度学习搭建神经网络(一)
- 神经网络与深度学习 笔记 (一)
- 简单地解释PHP分页原理及我的代码
- C标准库之一:assert.h
- interface和abstract
- javascript深入理解js闭包
- 手写面板实例
- 神经网络和深度学习(一)
- poj3181
- keyCode键码值对照表
- JS 截取字符串(支持中英文混合)
- IdHttpServer实现webservice
- 导入特定用户
- 自来水管道 (并查集+贪心==kruskal)
- webSql基础用法
- 用typescript开发AngularJS应用