Neural Networks and Deep Learning coursera总结
第一周
众所周知,开学第一周是不需要听课的,里面全是基础概念和大体框架,但是对于什么都不知道的学生而言,这毫无用处,随着后面的学习,一开始的框架都变形了
讲了一些基础知识,如果之前看过 Andrew Ng的机器学习那门课,那么这一周没有内容
首先 神经网络是这门课的基础。即整体操作围绕着 输入——神经元——输出
生物上 考虑实际的神经元,从上一个神经元接收信息,经过传递,向下一个神经元发送神经递质
计算机里面,这门课,将接收和传递认为是神经元的第一功能(线性回归),发送神经递质认为是神经元第二功能(**函数)
将计算机的行为反馈到生物上,那么解释就变成了,第一步 神经元对所有信息进行处理,第二步判断处理的信息是否需要发送
由于神经元构成神经网络,神经元一开始都是相同的,通过后面的激素等调节,分化成不同位置不同功能的神经元,(通过不同数据,分化成不同的参数)
给出一些现在的例子
输入 | 输出 | 应用 | 使用 |
房屋的参数 | 房屋价格 | 房地产 | NN |
广告,用户信息 | 是否点击广告 | 在线广告投送 | NN |
图片 | 类别 | 图片标记 | CNN |
语音 | 文字 | 语音识别 | RNN |
英语 |
汉语 | 同声传译 | RNNs |
图片,雷达信息 | 车辆控制 | 自动驾驶 | RNNs |
这门课程一直正在处理标准神经网络 standard NN
实际的项目过程是 想法-代码-实例 三者相互联系(项目迭代)
稍作说明为什么深度学习突然热门(计算力,数据,算法)
采访了 Geoffrey-Hinton
第二周
带你初步使用神经网络
为了让你仍对这门课有充足的激情,所以我们先做一个简单的项目,如何判断一张照片是否为猫片
过程 数据-算法-测试
数据:输入图片,图片都是彩色图,其存储是RGB三个通道混合,而我们特征量X是一个列向量,因而需要把图片m*n*3转换成(m*n*3)*1,我们用python里的numpy,里面有一个shape和reshape
算法:讲述神经网络的基础(如果上过 机器学习,那么不需要看了,直接跳到jupyterlab实验室进行作业)
输入X _______ A=WX+b _______ Y=sigmoid(A) 此时我们完成了前向
W,b是我们没有的参数,是我们需要训练的,所以我们还要对参数进行修改,为了更加贴合结果,J_cost = sum (y - Y)^2 y数据输入的结果(标准答案/真值),Y我们训练的结果
W = W - learning_rate * dW ______________ b = b - learning_rate * db
dW表示 dJ/dW,即代价函数对参量W的偏导,d某 同理
回顾微积分里面的等W,我们将次过程化成图,以J(a,b,c)=3(a+bc)为例,
W = W - learning_rate * dW 只需要我们从后面向前面走一遍即可全部求出,不需要依次独立计算 后向
为了让代码跑的更快,我们就要减少loop循环,(逻辑上是需要循环,但是当所有东西都展示后,数据内部可以更快的计算——矩阵算法)
尝试着将代码向量化
考验数学功底的时刻到了,如果导数都求不好,你可能都敲不出公式,即使边上给你导数表
这周采访 Pieter Abbeel
第三周
带你修改**函数
正如第一周所说的,**函数我们可以稍微修改一下,
sigmoid
可以尝试 tanh,relu
tanh
ReLU
leaky ReLU
解释为什么需要一个**函数
a1=W1*X+b1 a2=W2*a1+b2=W2*(W1*X+b1)+b2=W1*W2*X+W2*b1+b2=W*X+b
至于哪一个**函数(非线性函数)好用,不知道,都试一遍,经验上
对于二元分类 y=0,y=1选用 sigmoid 对于其他用tanh
**函数用线性函数尽可能处理回归问题
会想你的神经元,同一层中,通过了同样的数据,同样的计算,那么必然的到的是同样的结果,而现实是我们的神经元大体相似,个体相异,这就需要我们初始随机化,这样就可以打破对称性
np.random.randn
这周实验相当于改了一个**函数,没了
第四周
带你搭建一个深层网络,3层
解释深层和浅层,就是一个层多,一个层少
举个例子就是计算Y=X1 XOR X2 XOR X3 XOR X4
深层 log2(N)
浅层
形象的描述一下为什么深层有时候可以更好的模拟出结果
比如一张图像,经过第一层很细小的划分,可以得到很多图像边缘,第二层将图像边缘进行拼接,拼接后可能出现小的特征,如眼睛,耳朵,第三层将小特征拼接,得到一个大图,可能是一张脸