【Neural Network】林轩田机器学习技法
首先从单层神经网络开始介绍
最简单的单层神经网络可以看成是多个Perception的线性组合,这种简单的组合可以达到一些复杂的boundary。
比如,最简单的逻辑运算AND OR NOT都可以由多个perception构成的单层神经网络模拟。
但是,单层感知器神经网络能力再强也是有限的,有些逻辑也无法完成。比如,XOR异或运算。
这个时候,就很自然地引出了多层神经网络。
通过这个例子,可以看到多层的神经网络的表达能力要比单层的要强。
上面给出了看待神经网络的一种方式:
1)从原始输入开始一直到OUTPUT之前的那一层,可以看做是对输入x做各种transform
2)与OUTPUT紧挨着的那一层,可以看做是隐层输出做线性组合
并且,在这里规定了神经网络'regression'类型用sqaure error来衡量。
这里有个环节值得说道一下,我们来比较集中transform的方式:
1)如果是sign的:是表达力很强,但是由于是离散的,不好优化
2)如果是linear的:好优化,但整个网络也都相当于是个线性的了,失去了较强的学习能力
3)popular choice 是一种tanh(S)的转换器:
a. 这种转换器介于sign和linear之间,相当于是模拟化的sign
b. 同时这个转换函数的导数的性质又很好(与逻辑回归类似)
这样,神经网络的各个环节是啥已经搞清楚了。林接下来给出了神经网络各个部分的符号表示:
这里有个地方需要注意:每个隐层都有一个bias神经元,它与下一层的每个神经元都有权重连线(为了简便,bias设为常数1,对下一层每个神经元的偏置影响体现在权重连线上)
到此,可以给出神经网络的一个物理解释:前一层的输出作为厚一层的输入,每两个隐层之间的权重相当于两个隐层之间的匹配模式。
模型构造完成了,接下来就是如何学习模型的参数。
gradient boosting方法对于多层神经网络来说,有些太困难。
在这里,还是采用前人的梯度下降的思路来求解。问题的关键就是如何高效地计算出错误对于每个权重的导数。
这里先从最后一层的权重开始求解:这个求解利用了求导链式法则,讲每个神经元的输入分数s作为中间连接,就可以直观求解了。
林在这里将error与每个神经元的输入分数s的导数抽象出来,记为一个特殊符号delta。这样,就可以表示出来任意的error对于权重w的导数了。
每个神经元的输出x是很好求的(只要给定w,带入就可以求得了);因此,下面只需要关注,如何把error对于权重w的导数求解出来。
这里求解delta采用了递归的思路:
1)sl经过tanh的计算→xl
2)xl经过下一层的权重→sl+1
沿着这两个思路,就把sl与sl+1给联系起来了,因此也获得了delta的递推关系。
又因为最后一层的delta是可以直接算出来的,因此,delta的计算思路也出来了,可以backwards的思路算出来。
上面就是伟大的BP神经网络求解算法,的原型。。。
1)S:选点
2)forward:(initial w)求x
3)backward:利用反向递推关系,求解delta
4)GD:对每个隐层权重更新
若干轮之后,返回整个神经网络的‘权重+偏置’参数
1)3)可以同步去做,获得若干个x*delta,然后average的动作后作用于4)(一周前面试的时候还被面试官问到了这个问题,现在看来就是取个平均,就可以获得mini-batch的效果了)
下面再补充一些NN的其他问题:
1)神经网络由于太太复杂了,因此GD的方法难免落入local minimum
2)有关初始化选取W的问题,无外乎两种选择:
a. 如果W选的很大,wx就会很大,优化作用不明显(联想tanh的函数图像,如果wx的绝对值很大,wx下一轮即使有比较大的变化,神经元的输出也变化不大了)
b. 因此,通常的做法是w取相对小一些,随机一些的值,这样貌似能好一些
有关VC Dimension的问题:神经网络越复杂,VC就越大。
只要神经网络的层数一旦多起来,神经元一旦多起来,VC Dimension自然就起来了。因此,regularization自然不可避免。
最常规的做法是损失函数中加一个L2 regularizer惩罚项。
但:
1)L2惩罚项的作用效果是不让每个权重分量太大,但确实成比例变化的(Large的shrink large, small的shrink small),总的来说没啥改变
2)L1惩罚项倒是可以让某些项目为0了,但是not differentiable,所以不好求解
因此,林介绍了一种新的regularizer:weight-elimination regularizer:
1)无论是原来是大的还是小的w分量,都会有同等效果的shrink(大的减小了,小的可能减没了)
2)differentiable,求解比L1容易一些
在这一节课的问题中,给出了weight-elimination的求导结果:
通过这个结果分析,其实我TM啥也分析不出来。。。有功夫再看原始的论文吧:http://papers.nips.cc/paper/323-generalization-by-weight-elimination-with-application-to-forecasting.pdf
另外,还有一种stop early的方法防止过拟合:
这个方法的背后思想史:
1)有理论保证:迭代的次数愈多,dvc就越大
2)联合VC Dimension理论,early stopping有助于防治过拟合
【Neural Network】林轩田机器学习技法的更多相关文章
- 【Radial Basis Function Network】林轩田机器学习技法
这节课主要讲述了RBF这类的神经网络+Kmeans聚类算法,以及二者的结合使用. 首先回归的了Gaussian SVM这个模型: 其中的Gaussian kernel又叫做Radial Basis F ...
- 【Matrix Factorization】林轩田机器学习技法
在NNet这个系列中讲了Matrix Factorization感觉上怪怪的,但是听完第一小节课程就明白了. 林首先介绍了机器学习里面比较困难的一种问题:categorical features 这种 ...
- 【Deep Learning】林轩田机器学习技法
这节课的题目是Deep learning,个人以为说的跟Deep learning比较浅,跟autoencoder和PCA这块内容比较紧密. 林介绍了deep learning近年来受到了很大的关注: ...
- 【Random Forest】林轩田机器学习技法
总体来说,林对于random forest的讲解主要是算法概况上的:某种程度上说,更注重insights. 林分别列举了Bagging和Decision Tree的各自特点: Random Fores ...
- 【Decision Tree】林轩田机器学习技法
首先沿着上节课的AdaBoost-Stump的思路,介绍了Decision Tree的路数: AdaBoost和Decision Tree都是对弱分类器的组合: 1)AdaBoost是分类的时候,让所 ...
- 【Adaptive Boosting】林轩田机器学习技法
首先用一个形象的例子来说明AdaBoost的过程: 1. 每次产生一个弱的分类器,把本轮错的样本增加权重丢入下一轮 2. 下一轮对上一轮分错的样本再加重学习,获得另一个弱分类器 经过T轮之后,学得了T ...
- 【Linear Support Vector Machine】林轩田机器学习技法
首先从介绍了Large_margin Separating Hyperplane的概念. (在linear separable的前提下)找到largest-margin的分界面,即最胖的那条分界线.下 ...
- 【Support Vector Regression】林轩田机器学习技法
上节课讲了Kernel的技巧如何应用到Logistic Regression中.核心是L2 regularized的error形式的linear model是可以应用Kernel技巧的. 这一节,继续 ...
- 【Dual Support Vector Machine】林轩田机器学习技法
这节课内容介绍了SVM的核心. 首先,既然SVM都可以转化为二次规划问题了,为啥还有有Dual啥的呢?原因如下: 如果x进行non-linear transform后,二次规划算法需要面对的是d`+1 ...
随机推荐
- Codeforces Round #261 (Div. 2) - E (459E)
题目连接:http://codeforces.com/contest/459/problem/E 题目大意:给定一张有向图,无自环无重边,每条边有一个边权,求最长严格上升路径长度.(1≤n,m≤3 * ...
- Leetcode back(215) to be continue
solution discussion https://leetcode.com/problems/kth-largest-element-in-an-array/description/ -- 21 ...
- Selenium入门系列3 单个元素的定位方法
UI自动化首先要识别对象,再操作对象,最后判定实际结果与预期结果是否一致. 这一节学习的是识别单个对象,webdriver提供了8种方式. <a id="idofa" cla ...
- 寄生构造函数模式 js
有一点需要说明:首先返回的对象与构造函数或者构造函数的原型属性之间没有关系,也就是说构造函数返回的对象与在构造函数外部创建的对象没有什么不同,为此不能依赖 instanceof 操作符来确定对象类型. ...
- 缓存验证Last-Modifie和Etag的使用
看这张图,是浏览器发出请求到请求缓存到过程,这么一个原理 那么http里面如何进行验证呢?主要有两个验证到http头 Last-Modified(上次修改时间) 主要配合If-Modified-Sin ...
- python对表格的使用
#!user/bin/env python # coding=utf- import xlrd def readExcelDataByName(filename, sheetName): '''读取E ...
- P1316 丢瓶盖
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出 ...
- TypeScript学习-TypeScript环境配置
http://blog.csdn.net/shi_weihappy/article/details/49332091
- chrome 浏览器插件开发(二)—— 通信 获取页面变量 编写chrome插件专用的库
在chrome插件的开发过程中,我遇到了一些问题,在网上找了不少文章,可能是浏览器升级的原因,有一些是有效的也有无效的.下面我简单的分享一下我遇到的坑,以及我把这些坑的解决方案整理而成的js库 —— ...
- Spring注解@Value数值取值转换字符串失败
配置文件(yml)中,配置项如下: cebconfig: INST_CODE: 08801001 SFT_NOTIFY_CEB_CHANNEL: 123456 期望INST_CODE: 0880100 ...