机器学习06神经网络--学习
代价函数
标记方法:
神经网络的训练样本有 m 个
每个包含一组输入 x 和一组输出信号 y
L 表示神经网络层数
Sl表示每层的 neuron 个数(SL 表示输出层神经元个数)
将神经网络的分类定义为两种情况:
二类分类:SL=1, y=0 or 1 表示哪一类;
K 类分类:SL=K, yi = 1 表示分到第 i 类;(K>2)
Cost Function:
归一化的那一项只是排除了每一层 θ0后,每一层的 θ 矩阵的和。
最里层的循环 j 循环所有的行(由 sl +1 层的激活单元数决定);
循环 i 则循环所有的列,由该层(sl 层)的激活单元数所决定。
—————————————————————————————————————————————————————————
反向传播算法 (Backpropagation Algorithm)
为了计算代价函数的偏导数:
需要采用一种反向传播算法
也就是首先计算最后一层的误差, 然后再一层一层反向求出各层的误差, 直到倒数第二层。
公式推导:
1、先计算输出层的误差:
2、再根据下述公式向前依次递推计算所有隐含层误差:(黑色单线箭头)
3、最后根据公式更新参数值:
总结:
首先用正向传播方法计算出每一层的激活单元, 利用训练集的结果与神经网络预测的结果求出最后一层的误差;
然后利用该误差运用反向传播法计算出直至第二层的所有误差;
之后,我们便可以计算代价函数的偏导数了,计算方法如下:
——————————————————————————————————————————————————————————————————
随机初始化(Random Initialization)
任何优化算法都需要一些初始的参数。
通常初始参数为正负 ε 之间的随机值。
假设我们要随机初始一个尺寸为 10×11 的参数矩阵,代码如下:
Theta1 = rand(10, 11) * (2*eps) – eps
——————————————————————————————————————————————————————————————————
综合:
使用神经网络时的步骤:
网络结构: 首先要做的是选择网络结构, 即决定选择多少层以及每层分别有多少个单元。
第一层的单元数为训练集的特征数量。
最后一层的单元数是训练集结果的类标数量。
如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:
1. 参数的随机初始化
2. 利用正向传播方法计算所有的 hθ(x)
3. 计算输出层及隐含层的误差
4. 利用反向传播方法计算所有偏导数
5. 利用梯度数值检验方法检验这些偏导数
6. 使用优化算法来最小化代价函数
——————————————————————————————————————————————————————————————————
梯度检验(Gradient Checking)
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误。
意味着, 虽然代价看上去在不断减小, 但最终的结果可能并不是最优解。
为了避免这样的问题, 我们采取梯度数值检验 (Numerical Gradient Checking) 方法。
这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点,然后计算两个点的平均值用以估计梯度。
即对于某个特定的 θ,我们计算出在 θ-ε 处和 θ+ε 的代价值(ε 是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在 θ 处
的代价值。
Octave 中代码如下: gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)
当 θ 是一个向量时, 我们则需要对偏导数进行检验。
因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对 θ1进行检验的示例:
最后我们还需要对通过反向传播方法计算出的偏导数进行检验。
机器学习06神经网络--学习相关推荐
- 吴恩达机器学习[9]-神经网络学习
神经网络学习 Neural Network 非线性假设 Non-linear hypotheses 神经元与大脑 Neurons and the brain 模型展示1 Model represent ...
- 机器学习 量子_量子机器学习:神经网络学习
机器学习 量子 My last articles tackled Bayes nets on quantum computers (read it here!), and k-means cluste ...
- 机器学习之神经网络学习及其模型
1.神经元模型 历史上,科学家一直希望模拟人的大脑,造出可以思考的机器.人为什么能够思考?科学家发现,原因在于人体的神经网络. 神经网络最基本的成分是神经元模型 其中,W表示的是向量,代表的是权重,函 ...
- 吴恩达机器学习 6.神经网络学习
一.非线性假设 学习了线性回归和逻辑回归,二者都有的缺点有:当特征太多时,计算的负荷会非常大. 假如: 当使用x1,x2x_1,x_2x1,x2的多项式进行预测时,我们可以应用的很好. 之前有了解 ...
- 吴恩达机器学习:神经网络学习和作业
神经网络 (一)神经网络模型理解 1.1 模型 1.2 神经网络模型(前馈) 1.3 建立神经网络模型 1.4 多元分类 1.5 循环神经网络与对称连接网络 (二)神经网络模型实现 2.1 代价函数 ...
- 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单
向AI转型的程序员都关注了这个号☝☝☝ 以下是关于神经网络.机器学习.深度学习以及大数据学习的备忘单,其中部分内容和此前发布的<资源 | 值得收藏的 27 个机器学习的小抄>有所重复,大家 ...
- 人工智能、机器学习、深度学习和神经网络的区别
人工智能 背景:人工智能最初可以追溯至1956年,当时多名计算机科学家在达特茅斯会议上共同提出了人工智能的概念.在随后几十年中,人工智能一方面被认为是人类文明未来的发展方向,另一方面也被认为是难以企及 ...
- 系统学习机器学习之神经网络(七) --CPN
原文:http://blog.csdn.net/u014070279/article/details/47299987 1987年,美国学者Robert Hecht-Nielsen提出了对偶传播神经网 ...
- 系统学习机器学习之神经网络(三)--GA神经网络与小波神经网络WNN
1 遗传算法 1.1 遗传算法简介: 遗传算法是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随 机化搜索方法.它是由美国的 J.Holland 教授 1975 年首先提出,其主要特 ...
最新文章
- 使用SpringBoot的jackson包进行实体类型转换
- 联想p720装系统_分享联想ThinkPad X1 Carbon笔记本最稳的重装WIN10系统方法
- Ubuntu下的NBD和iscsi挂载
- android socket 框架c#,C#与Android Socket通信
- CSS3 Flex布局子元素的属性
- (129)FPGA面试题-FPGA前仿真与后仿真的区别?
- java输出当前文件所在路径
- Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2”
- 使用python根据图片链接下载图片
- 数组(Java基础内容)
- API开发手册在线中文版
- C语言编程>第八周 ③ 请编写一个函数void fun(char orig[],char result[],int flg),其功能是:删除一个字符串中指定下标的字符。其中,orig指向……
- HTTP/3 ,它来了。
- 强化学习11——为什么ADP需要持续激励条件?
- python seaborn学习笔记
- Laravel 中使用 Laravel-Excel 美化
- 了解品牌名称 TM (™) 和 R(®) 符号之间的区别至关重要
- 学习大数据开发要掌握哪些技术呢?
- 特征点检测和特征点匹配(ORB)
- 对微分方程的特征描述及其称呼
热门文章
- 后台系统可扩展性学习笔记(一)概要
- c++ cdi+示例_C ++“和”关键字示例
- Java Number shortValue()方法与示例
- c++ 怎样连接两个链表_LeetCode | 链表的入口,一文帮你搞定“环形链表”(python版,最简单解析)...
- uva 437——The Tower of Babylon
- C++ 写时拷贝 3
- 使用mmap实现大文件的复制:单进程与多进程情况
- 文件操作(解密加密)
- 【排序算法】计数排序
- 线程与进程的控制原语对比