Coursera Cpp程序设计 week 2
第二周的内容比较多,主要是介绍类的一些重要概念,下面回顾下。
课程地址:
coursera:C++程序设计
https://www.coursera.org/learn/cpp-chengxu-sheji
中国大学MOOC:程序设计与算法(三)C++面向对象程序设计
程序设计与算法(三)C++面向对象程序设计
类和对象类成员的可访问范围在类的定义中,用下列访问范围关键字来说明类成员 可被访问的范围:
private: 私有成员,只能在成员函数内访问
public : 公有成员,可以在任何地方访问
protected: 保护成员,以后再说
设置私有成员的机制,叫“隐藏” ,“隐藏”的目的是强制对成员变量的访问一定要通过成员函数进行,那么以后成员变量的类型等属性修改后,只需要更改成员 函数即可。否则,所有直接访问成员变量的语句都需要修改。
构造函数构造函数有如下特性
名字与类名相同,可以有参数,不能有返回值(void也不行)
作用是对对象进行初始化,如给成员变量赋初值
如果定义类时没写构造函数,则编译器生成一个默认的无参数 的构造函数,默认构造函数无参 ...
Neural Networks for Machine Learning Lecture 11
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这一章中间一部分感觉完全没听懂在干嘛,这里就总结下Hopfield Nets的定义以及玻尔兹曼机。
Hopfield NetsHopfield Nets是由二进制神经元组成的递归神经网络,非线性递归神经网络往往很难分析,John Hopfield等人注意到如果链接是对称的,存在一个全局能量函数(这里能量的含义为一种度量的意思),来看能量函数的定义:
E = − \sum _is_ib_i-\sum_{i< j} s_is_j w_{ij}\\
s_i \in \{0,1\}这个公式让我们能够计算开关某个神经元对于能量的影响:
\text{Energy gap} = \Delta E_i = E(s_i=0) -E(s_i=1)=b_i+\sum_{j} s_j w_{ij}找到能量最低的点的方法为从一个随机的初始状态开始,每次以随机的顺序改变一个神经元,来看如下 ...
Coursera Cpp程序设计 week 1
这里开始总结下北大郭炜老师的C++课程,课程地址如下,在两个地方分别开课,但是内容基本一致,这里会按照coursera上的内容按周进行总结回顾,以下是第一周的内容。
课程地址:
coursera:C++程序设计
https://www.coursera.org/learn/cpp-chengxu-sheji
中国大学MOOC:程序设计与算法(三)C++面向对象程序设计
程序设计与算法(三)C++面向对象程序设计
从C到C++函数指针定义形式 :
类型名 (* 指针变量名)(参数类型1, 参数类型2,…);
例如: int (*pf)(int ,char);
表示pf是一个函数指针,它所指向的函数,返回值类型应是int, 该函数应有两个参数,第一个是int 类型,第二个是char类型。
看一个具体例子
#include <stdio.h>
void PrintMin(int a,int b) {
if( a<b )
printf("%d",a);
else
printf("%d",b);
}
int ...
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 ...