神经网络与机器学习
这个专栏将记录我的机器学习之路
quinn1994
这个作者很懒,什么都没留下…
展开
-
西瓜书学习(四)—支持向量机之最优化
什么是最优化理伦呢?最优化理论是针对最优化问题而言的,通常情况下,我们的最优化问题涉及到以下三种情况:1)无约束优化问题形如:min f(x);对于此类问题,我们采用fermat定理,即对函数求导得到导数为0的点,该点也就是极值。将候选点带入,得到最优点。2)有等式约束的优化问题形如:对于此类问题,根据高数知识,我们采用拉格朗日乘子法。把等式约束h_i(x)用一个系数与f(x)写为一个式子。再对该...原创 2018-05-01 21:14:05 · 1318 阅读 · 0 评论 -
西瓜书学习(三)—SVM(上)
注:本篇参考了大牛pluskid的博客。有兴趣的童鞋可以去观摩一下,深入浅出。回复后台“pluskid”,得到地址。1)基本概念(1)间隔(margin)和支持向量(SV)如图这些点散落在不同的地方,我们的目的是将不同类别的东西分开。那么用什么分类呢?我们可以用好多个超平面(hyper plane)将这些不同的点分开。但是哪个超平面是最合适的呢?从感觉上来看,我们似乎应该将红线作为我们的划分平面。...原创 2018-05-01 21:02:30 · 3045 阅读 · 2 评论 -
西瓜书学习(二)—决策树(下)
1)剪枝处理我们之前在讲神经网络时候,提到过可能出现的“overfitting”现象,即训练结果不能很好泛化的现象。这里我们在决策树的处理中,当我们对决策树过度划分时,也会出现这种现象。因此,我们采用减去多余的树枝来减轻这种现象。为了测试泛化能力,类似神经网络,我们引入validation_data。如下:(1)预剪枝预剪枝是指我们在生成决策树的时候,对每个节点在划分时,进行预先估计,如果当前节点...原创 2018-04-25 19:41:42 · 2653 阅读 · 1 评论 -
西瓜书学习(一)—决策树(上)
1)什么是决策树?顾名思义,决策树是以树形的结构方式来对事件做决定和分类。我们以来判断一个瓜是不是好瓜来举例子,如下:决策树的结构一般包含一个根节点,若干个内部节点和若干个叶节点;根节点包含所有样本(各种各样的瓜)。内部节点是西瓜的属性(根茎叶是什么样子的),叶节点是结论(好瓜,坏瓜)。每条从根节点到叶节点的路径就代表一种属性判定路径。2)划分依据你可能要问,西瓜有那么多属性,我们到底先选择什么来...原创 2018-04-25 18:53:02 · 8598 阅读 · 2 评论 -
10.神经网络与深度学习(九)—梯度消失问题
1)引言终于开始进入深度学习了,其实深度学习就是多层神经网络训练数据。2)什么是梯度消失问题?梯度消失问题实际上是指在隐藏层BP的时候梯度是逐渐变小的。也就是说前面隐藏层的学习速度比后面的隐藏层学习速度小。3)什么导致了梯度消失我们先看一个很简单的深度神经网络:每一层只有一个单一的神经元。下图就是三层隐藏层的神经网络:我们这里先给出代价函数关于第一个隐藏神经元的梯度∂C/∂b1的公式,如下:我们现...原创 2018-04-16 17:27:48 · 998 阅读 · 0 评论 -
9.神经网络与深度学习(八)—程序
这里我们主要介绍与之前代码所不同的地方。1)cost function 示例代码如下:class QuadraticCost(object): @staticmethod def fn(a, y): return 0.5*np.linalg.norm(a-y)**2 @staticmethod def delta(z, a, y): ...原创 2018-04-13 15:49:00 · 499 阅读 · 0 评论 -
8.神经网络与深度学习(七)—改进学习效率的其他方法
昨天,我们通过改进代价函数来改进了学习效率。今天,我们来探究一下其他的方法。1)规范化(1)为什么要规范化?这里我们先举一个例子,就用我们刚刚学过的神经网络。这里我们只使用mnist数据集中的前1000个数据。这里我们使用交叉熵代价函数,设置学习速率为0.5,小批量数据大小为10将神经网络训练400个周期。代码如下:import mnist_loaderimport network2train...原创 2018-04-10 20:47:10 · 601 阅读 · 0 评论 -
7.神经网络与深度学习(六)—改进学习效率
1)引言前面我们初步认识了神经网络在图像识别当中的应用,我们虽然得到了比较好的识别率,但是能否再提高一点呢?2)代价函数的改进(1)交叉熵函数(cross entropy)首先我们先来看一下公式,其中a是神经元输出,训练输入为x=1,目标输出是y=0:这里 ,。我们再来看一下,sigmoid函数图像:这里我们可以清楚地看到,当函数输出值接近0或1的时候,其导数都逼近0。也就是说逼近0,那么公式(...原创 2018-04-09 21:12:44 · 1851 阅读 · 0 评论 -
6.神经网络与深度学习(五)—手写数字识别示例下
今天我们来正式试验一下这个程序。1)编写程序首先,我们要创建一个python工程,这里我用的Pycharm。点击左上角的file-new project:如下,创建工程:然后,我们要把相关的文件放到一个工程下面。如下:这里,我们的recognition工程文件夹下面包含了四个文件。分别是:demo.py,用于执行程序。network.py,定义了Network类,其中包含了各种相关的字段,方法,属...原创 2018-04-08 10:06:00 · 496 阅读 · 0 评论 -
5.神经网络与深度学习(四)—手写数字识别上
终于要开始实战阶段了,这里我们要实现的是一个手写数字的识别,这个可以应用于邮局的邮编号码识别。要实现神经网络学习,我们先需要一个手写数字图片的数据集,这个数据集我们用的是美国国家标准与技术研究所的子数据集—mnist。以下是取自该数据集的一些图像:这个数据集总共有60000个数据,也就是有60000张图片,每张图片的像素是28*28。每个像素点代表一个灰度值。今天先把主要程序讲一遍,明天再试着运行...原创 2018-04-07 15:37:23 · 515 阅读 · 0 评论 -
4.神经网络与深度学习(三)—BP算法
引言:在上节课中,我们知道梯度下降算法的核心是要重复对w,b求偏导数,这样我们就能够让代价函数一直减小,最后让实际输出值尽量拟合预计输出值,那么我们怎么去求w和b的偏导数呢?这节课,我们就来讲一下。1)基本规则既然我们想求出每个位置相应的w和b,我们就需要先将每个位置的w和b清晰的表示出来。请看下图:这里你可能会奇怪,为什么下标先写2,再写4呢?按照常理来说,第二层的第四个神经元应该放在前面,第三...原创 2018-04-06 17:10:31 · 802 阅读 · 0 评论 -
3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法
引言:我们根据高数中所学的梯度定义知道,二元函数中梯度方向是f(x,y)增长最快的方向,注意:这里我们的f(x,y)是凸函数,我们尝试可以从这里去理解。1)梯度下降算法接着上节课讲的,我们昨天先把一元函数(一维)的“下降”介绍了一下。那么同样的,二元函数也可以类比用这种方法,趋向于极值。例图如下:这里,我们想让c变小,这也就意味着,我们需要让C的变化量一直小于0。我们从微积分出发,C的变化量如下式...原创 2018-04-04 17:45:33 · 1913 阅读 · 0 评论 -
2.神经网络与深度学习(一)-基本概念与随即梯度下降
申明,本阶段机器学习需要一定的高数知识和概率知识。适合本科以上的理工科童鞋学习。中心思想:不断修正w,b,直到实际输出与期望输出一致(训练),也就是将cost function降低。(1)感知器与神经元首先,要知道构造神经网络最基本的单元是感知器。那么什么是感知器呢?感知器是输入若干‘1’或‘0’信号,输出一个‘1’或‘0’的结构,也就是说它是离散的。为了表示某个输入参数的重要性,我们引入了权重(...原创 2018-03-26 21:33:00 · 531 阅读 · 0 评论 -
1.机器学习
今天正式开始机器学习的内容,其他的内容也将同步更新。首先,确定学习路线图。1.选择入门材料。首先,学习Neural networks and deep learning这本书。2.学习deep learning,挑一个框架做实验。我推荐 pytorch/tensorflow/mxnet 里面选一个。然后一边看书,一边实验,把梳理中的东西实现一下,把框架里的教程也跑一遍,这样对于深度学习就入门了。从...原创 2018-03-24 16:12:32 · 236 阅读 · 0 评论 -
手写数字识别(一)
在学习识别手写输入数字时,初始化矩阵那里,有点不理解。源代码是这样的:self.biases=[np.random.randn(y,1) for y in sizes[1:]] '''创建一个偏差向量'''self.weights=[np.random.randn(y,x) for x,y in zip(sizes[:-1],sizes[1:])] '''创建一个...原创 2018-03-31 17:31:56 · 2605 阅读 · 0 评论 -
识别手写数字2.7版本改为3.x版本的坑
1)cPikle问题在python3.x版本,将cPickle模块,改成了pickle模块。2)xRange在python2.x版本中,range是生成列表的,xrange是生成器。到了python3.x版本只保留了range生成器。将程序中的xrange都改成range函数。3)zip数据类型zip在python3.x中是一个迭代器,所以不能直接获得长度。这里直接将用到zip的地方都转化成lis...原创 2018-04-01 16:28:10 · 487 阅读 · 0 评论