Neural Networks for Machine Learning Lecture 10
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这节课主要介绍了为什么要综合很多个模型以及一些具体的做法,这里回顾几个比较重要的方法。
Mixtures of Experts核心思路是对不同的数据使用不同的模型(experts),最后对结果进行加权平均输出,例如高斯混合模型。
损失函数如下
p_i=\frac{e^{x_i}}{\sum _j e^{x_j}},E=\sum_{i} p_i(t-y_i)^2利用Lecture 4中的等式,分别求梯度
\frac{∂p_i}{∂z_i} =p_i-p^2_i\\
\frac{∂p_j}{∂z_i} =-p_i p_j (i\ne j)可得
\frac{\partial E}{\partial y_i}=2p_i(y_i-t)\\
\begin{aligned}
\frac{\partial E}{\partial x_i}
&= (p_i-p_i^2) (t-y ...
CS50 pset2
上上一周开始了哈佛大学的CS50课程学习,这周在解决pset2中的crack时候花了挺多时间,这里专门总结下。
题目地址
这题的关键问题是把长度小于等于n的并且由大小写字母组成的字符串穷举出来,但是代码有个小问题,如果我取m=6,那么程序运行会报错,感觉是空间太大的或者循环太久原因,代码如下。
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <math.h>
//数字字母个数25*2 = 52
const int K = 52;
//数组长度
const int M = 5E8;
//最长长度+1
const int m = 5;
//存放单词的数组,注意第二个维度长度为m+1
char words[M][5];
//获得大小写字符
void getcharacter(char c[]);
//获得单词,全存在一个数组里,start到end为长度为l的字符,返回长度l+1的起始处
in ...
假期总结
假期就这样结束了,17号就要开始硕士生活,看着自己的github上渐渐有些自己的东西,还是多少有点成就感的,这几个月在家闭关修炼尽管没有完全完成自己全部的目标,但是还算是进步了不少,前几天看到硕士的课程设置,有些失落,本以为可以多学一些计算机方面的知识,结果选修课都是金融方面的,看起来硕士阶段又是漫漫自学路,开学前立几个这学期的目标,看看学期结束的时候能够完成几个:
1.coursera上吴恩达老师的deeplearning专项课程
2.coursera上的Advanced Machine Learning专项课程
3.MIT的Mathematics for Computer Science课程
4.学堂在线邓老师的数据结构
5.看完算法笔记,12月去考PTA甲级,争取考个好成绩。
6.edx哈佛大学的CS50
7.中国大学MOOC离散数学
8.中国大学MOOC C语言程序设计精髓
9.中国大学MOOC 计算机程序设计(C++)
10.中国大学MOOC 程序设计与算法(三)C++面向对象程序设计
11.中国大学MOOC Python数据分析与展示
11.一些之前课程的收尾工作,基本 ...
斯坦福算法专项课程Course1 week1习题解析
这一部分将带来Course1 week1的习题解析。
选择题选择题13-way-Merge Sort:假设在Merge Sort的每一步中不是分成两半,而是分成三分之一,对每部分进行排序,最后使用三向合并子程序将它们组合起来。这个算法的整体渐近运行时间是多少?(提示:请注意,合并步骤仍然可以在中实现$O(n)$时间。)
$n$
$n^2\log(n) $
$n ( \log(n))^2 $
$n\log(n) $
这里和课件中的区别为树状图为三叉树,即第$j$层有$3^j$个子问题,每个子问题的大小规模为$\frac{n}{3^j}$,由于长度为$m$的数组每次Merge操作需要的时间复杂度为$O(m)$,所以第$j$层的时间复杂度为
O(3^j \times \frac{n}{3^j}) =O(n)因为为三叉树,所以一共有$O(\log n)$层,总共的时间复杂度为
O(n\log n)选择题2给你两个函数$f,g$满足$f(n) = O(g(n))$,那么$f(n)\times \log_2(f(n)^c) = O(g(n)\times\log_2(g(n))) $是否成 ...
斯坦福算法专项课程Course1 week1内容回顾
将从这篇博文开始记录coursera斯坦福算法专项课程的笔记,每一周的内容分为两个部分,课程内容回顾以及习题详解,下面进入正题。
附上课程地址:https://www.coursera.org/specializations/algorithms
Course 1 Week 1第一门课主要是介绍分治算法的,这一周主要介绍了一些算法的基本概念,例如算法复杂度等等,下面分别回顾下。
整数乘法
Input: 两个数字n位的数字x,y
Output: x*y
如果直接计算不必多说,中学里已经学过,这里老师介绍了另一种算法
Karatsuba Multiplication记$x =10^{\frac n 2}a+b,y=10^{\frac n 2}c+d$,那么
xy = 10^nac +10^{\frac n 2} (ad+bc) + bd这样来看,我们只要计算$ac,ad,bc,bd$即可,考虑如下关系
\begin{aligned}
(a+b)(c+d) &= ac+(ad+bc) +bd\\
ad+bc &= (a+b)(c+d)-ac-bd
\end{aligned}这说明不必 ...
Neural Networks for Machine Learning Lecture 9
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这一讲介绍了主要介绍了提升generalization的一些方法,这里总结一下。
参考资料:http://www.hankcs.com/ml/hinton-ways-to-make-neural-networks-generalize-better.html
防止过拟合方法1:获得更多数据这个方法无需解释,数据越多,过拟合的可能性就会减少。
方法2:使用能力恰到好处的模型其实就是奥卡姆剃刀原理,用尽量简单的模型来拟合数据。
方法3:平均很多不同的模型这个主要是bagging的思想,例如决策树。
方法4:贝叶斯方法利用先验信息。
下面介绍方法2以及方法4
几种限制模型能力的方法Architecture限制隐藏层以及每一层的神经元个数。
Early stopping从一个很小的权重开始,在过拟合之前就停止。
Weight-decay增加损失项。
$L_2$损失项
C = ...
Neural Networks for Machine Learning Lecture 8
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这一讲介绍了“Hessian-Free” optimization,Multiplicative connections以及Echo state networks,这里主要回顾Multiplicative connections和Echo state networks。
Multiplicative connections老师这里先介绍了一种根据文本来预测下一个字母的方法,这是因为预测下一个字母要比预测下一个单词容易得多,如果用之前的$RNN$模型,可以得到下图
我们来看下这样需要几个参数,考虑公式
h_T =M∗h _{T−1}+h _{bias}$M\in R^{1500\times 1500}$,$h _{bias}$表示86个字母,所以参数数量为
86\times 1500\times 1500可以看到,这样还是需要很多权重的,所以老师介绍了下面一种方法 ...
奇异值分解(2)——奇异值分解的性质
之前一篇博客证明了奇异值分解,这篇博客将证明一些比较重要的性质。
首先回顾下奇异值分解
设$A$是一个$m\times n$矩阵, 则存在$m$阶正交矩阵$U$和$n$阶正交矩阵$V$, 满足
A=U \left[
\begin{matrix}
\sigma_1 && & \\
& \ddots && \\
&&\sigma_r& \\
&&&0
\end{matrix}
\right] V^T=U\sum V^T 其中$\text{r = rank A},\sum\in R^{m\times n}$. 习惯上,设 $\sigma_1\ge\sigma_2\ge…\ge\sigma_r>0$,称$\sigma_1,…,\sigma_r$为奇异值(singular value).
$U,V$与四个基本子空间的关系这里来讨论$U,V$与$A$的四个基本子空间的关系。
对$A=U\sum V^T$两边右乘$V$可得$AV=U\sum V^TV=U\sum$,考虑左右两个矩阵的每一列可得
Av_i=\sigma_i u_i (i=1, ...
Neural Networks for Machine Learning Lecture 7
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这节课蜻蜓点水地介绍了RNN,这里主要回顾下LSTM以及本周的习题解答。
Long Short Term Memory (LSTM)由于梯度爆炸和梯度消失的问题,RNN很难学习到太久之前的输入,为了解决这个问题,有人提出了Long Short Term Memory (LSTM),具体如下
这里有三个门,分别是keep gate,write gate以及read gate,keep gate控制着记忆单元,如果权重为$1$,数据保持不变,write gate控制数据输入, read gate控制数据输出。
Quiz这一章的习题比较难,这里记录下。
Problem 1How many bits of information can be modeled by the hidden state (at some specific time) of a Hidden M ...
Hoeffding不等式的证明
Hoeffding不等式在机器学习的理论知识中非常重要,是证明VC-bound的基础,这篇文章给出其证明。
Hoeffding不等式首先给出Hoeffding不等式的结论
X_1,...,X_n是独立同分布的随机变量,X_i服从参数为p的伯努利分布,\\
即\mathbb P(X_i=1)=p,\mathbb P(X_i=0)=1-p,那么\\
\mathbb P(\Big|\overline X -\mathbb E[\overline X]\Big|\ge t )\le2e^{-2nt^2}\\
其中\overline X=\frac 1 n\sum_{i=1}^n X_i,\mathbb E[\overline X]=\frac1n\mathbb E[\sum_{i=1}^n X_i]=p,t>0\\下面就来证明这个结论,证明方法主要受到MIT概率课程的启发。
首先给出一个引理
引理1 (马尔可夫不等式)
Z为非负随机变量,那么\mathbb P(Z\ge c)\le \frac{\mathbb E[Z]}{c}这个引理是马尔可夫不等式,后面证明中会用到,这个不等式的证明比较 ...
Neural Networks for Machine Learning Lecture 6
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这节课主要介绍了几种优化的方法,这里回顾下。
神经网络中更新权重的方法为梯度下降,简单来说,梯度下降可以分为以下两种
Full-batch gradient descent这种梯度下降算法就是每次计算全量的梯度然后进行更新,这样有两个问题,一是数据量太大的时候计算太慢,二是如果数据重复很多,那么就会带来不必要的计算,于是这样就有了Stochastic gradient descent
Stochastic gradient descent和Full-batch gradient descent相对,Stochastic gradient descent每次只取一部分数据,然后计算其梯度,于是这样又会产生一种极端情况——每次只取一个数据,这种叫做“online”,老师说由于计算能力的问题,这种算法效果不如mini-batch(每次取少量数据)效果好,所以一般情况下都使用 ...
Neural Networks for Machine Learning Lecture 5
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这一讲主要讲了图像识别以及卷积神经网络,感觉有点蜻蜓点水,这里主要回顾下重点。
卷积神经网络与池化在图像识别时,由于一个物体可能会旋转,以及出现在不同的位置,所以用多种方式表示同一个像素,具体做法如下:
这里的意思是对同一张图像只提取一部分特征,但是可以重复提取多次,但是注意对应的权重是同一个,具体如下:
$h_1,h_2$对应的权重都是上图。这样做确实可以增加许多信息,但是特征有点重复,处理这个问题的办法是池化,做法是将输出值取平均,具体如下:
这样做的好处是可以处理更大的数据,坏处是无法确定特征的位置。