Deep Learning
1.机器学习中数学基础
二次型矩阵:
https://wenku.baidu.com/view/b3a01ed2b9f3f90f76c61ba2.html
利用矩阵的写法可以很方便的表示

泰勒级数

梯度相关:https://www.cnblogs.com/pinard/p/5970503.html
概率部分
贝叶斯实例:

https://blog.csdn.net/SugarAnnie/article/details/78951033
特征值与特征向量:
矩阵部分知识补充:
http://www.sohu.com/a/154654789_465975
https://blog.csdn.net/liangjun_feng/article/details/78457377
https://www.cnblogs.com/Dumblidor/p/5760606.html
PCA:
降维为了让剩下的行之间方差尽可能大,让他们的相关性尽可能的小。(目的:让数据量变少,同时也保留住原始的信息)
https://blog.csdn.net/google19890102/article/details/27969459
PCA本质:协方差矩阵的对角化
一般约束优化:
凸优化问题
凸函数中的局部最优解便是全局最优解
2. 从线性分类器到人工神经网络
线性分类器得分函数:


两种损失函数的理解
感知器
非线性分割中的优势



传递函数
如果每一层之间都是一些线性的变化,那其实不论多少层其实都可以用一层来表达,所以我们会引入一些非线性的函数。


激活函数:对信号做筛选,看要不要让一些打断你的信号过去。
BP算法
需要利用这个算法去传递每一层中的误差来不断修正他。
正向传播举例:我们需要去做很多题目,根据她的错误等来指导自己的学习。
反向传播举例:根据得出的结果,去找为什么犯错,去解决这个问题。

把d1-dj看作标准答案。
利用l2 loss(对应的差值)来判断他们的差值。1/2只是为了计算方便。去掉偏执项b也是为了计算简便。


把这个表示出来之后我们需要去求误差的最小值。
例子:

我们先自己随便设定值,去看差距(就像先做一套高考题去看我与标准答案的差距再做修正)
根据求导的链式法则去求导




BP算法用来的来偏导,我们利用这个偏导去修正我们的误差。
百度Tensorflow playground
损失函数与传递函数一些分类与理解
https://blog.csdn.net/u012162613/article/details/44239919
sigmod函数的理解:
https://blog.csdn.net/u014422406/article/details/52805924
3.卷积神经网络
https://blog.csdn.net/qq_25762497/article/details/51052861
为什么要有卷积神经网络,因为如果不用卷积的话如果我们去处理图像,那么w会非常多,运算量非常大。

全连接层是指,上一层会与下一层中的每个层都有联系(w)

- 数据层
有关输入数据的几种操作方式:
- 归一
- 去均值(例如我们去区分很多颜色,如果他主要有偏红的颜色,我们去了均值就有正有负)
- PCA/白化
https://blog.csdn.net/zkp_987/article/details/78684855

一般对于图像而言,我们就只用到第一种。因为不需要去均值。例如2772773(像素点先是277*277的矩阵,3是三个颜色通道RGB)
数据层处理完毕之后来到CONV层(卷积计算层)
- 卷积层
卷积计算层:
- depth理解为:有多少人去看了这个图片。要有大家的意见汇总才能有意义才能看到东西。
- 步长:每个人看到的是一个窗口,要来利用窗口的滑动,步长指窗口滑动多少。
- 填充值:例如我是一个32323 我现在用4*4的窗口来看,不能刚好从最左到最右,所以我们需要去补0.
不断去滑动。
5个小朋友,每个人都有一个世界观,第1位小朋友便用她的世界观(她的w)去看第一个3*3的窗口,然后利用窗口


对应区域对应的数相乘加和。(有一些会加一个偏执项)


- 激励层
看卷积层读到的信号是否值得往下传,以及按什么比例往下传。相当于之前是5个下属,他们给你反馈了意见,你不一定全都听,需要判断。




- 池化层
作下采样:往下采样,保存图片中的大量信息。
相当于找一个小朋友来总结这几个要点,依旧去看每个小块,取出每个小块最重要的东西。依旧是一个窗口在滑动,看你需要降到什么程度。
1.max:看最大的信息
2.avg:用平均数据
- 全连接层

左边是小朋友看的东西,右边是小朋友给的评价。

之后是小朋友的领导去看,依次类推。




数据量大可以减缓过拟合。
正则化与Dropout(?不太明白)
用来约束和缓解过拟合。l1,l2也是一些正则化方式。
Dropout是指随机失活,用了之后,比如dropout为0.5

u1生成一个随机数组去取舍,把小于0.5的部分都留下来。下来是他的数学期望。将这些保留下来的数字与H1去做点乘。
我们需要预测的时候结果快,所以我们预测的时候就不要去算p,把这个p给放在模型训练的时候去。

对于dropout的理解:
我们需要让神经网络有一定的泛化能力,因为是有一部分的冗余的信息。


96个小朋友,按照一个1111的窗口来滑动,拿到5555的数据。

1111的窗口滑动,步长为0,补偿0.下采样池化按照33的块每次滑动2步。

框架示例


caffe使用方式

-
数据层
bottom表示从哪一层读,top表示输出给哪一层。name很重要,很多时候用别人的模型的时候是需要改这个name的。type:指当前层是什么层次,此时是数据层。source指定数据来源,batch-size指每次丢入64张图片做一轮的处理和迭代。scale:相当于归一化,做一个缩放。
mei yi c
-
卷积层
bottom用到data,输出conv1。
caffe当中学习率有两个,全局学习率和每一层学习率。最终的学习率是由每一层的学习率全局的。因为这层有w和b,有偏执项,相当于是把w和b独立给了这两个blobslr。分别指w和b的学习率。
numoutput指:相当于上节课的depth,多少个小朋友多少个神经元。有多少的卷积和,相当于有多少的小朋友去看。
kernelsize:滑动窗口大小5%
stride:滑动步长
weightfiller与biasfiller是去初始化w和b的权重。定义的是几种初始化的方式。

-
池化层
image.png
-
全连接层
image.png
-
激励层
image.png
有些时候我们用别人的模型的时候可以把前面层次的学习率调低(因为他们已经做得很完善了)我们只需要调整后面的
在这里去定义全局的学习率。iter和interval分别表示训练集要训练多少轮和验证集需要多少轮。lr-policy表示用什么方式去做优化,此时表示的step,梯度下山法。stepsize:步长,display指多少轮之后做一次信息的展示。snapshot:害怕有服务器断电的情况,保留状态,表示每过1w轮保存一次权重。以方便重新加载。


我们需要修改数据源,改名字,换个数。


finetuning 微调
一个示例:
http://www.cnblogs.com/louyihang-loves-baiyan/p/5038758.html
python里面的步骤


在写prototxt。其中lmdb指数据库类型

一个py的预测示例

可视化网络结构

solver、deploy、train_val三个prototxt的一些区别和解释参考
http://lib.csdn.net/article/aiframework/62856
Tensorflow使用方式


补充np的一些知识
import numpy as np
b = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[0,1,1],[0,5,6],[7,8,9]],[[1,2,1],[1,5,1],[7,8,9]]])
print(b)
a=b.shape#指维度,从里面往外面看,看逗号
print(a)
c=b.sum(axis=0)
d=b.sum(axis=1)
e=b.sum(axis=2)
print(c)
print()
print(d)
print()
-------------
[[[1 2 3]
[4 5 6]
[7 8 9]]
[[0 1 1]
[0 5 6]
[7 8 9]]
[[1 2 1]
[1 5 1]
[7 8 9]]]
(3, 3, 3)
[[ 2 5 5]
[ 5 15 13]
[21 24 27]]
[[12 15 18]
[ 7 14 16]
[ 9 15 11]]
[[ 6 15 24]
[ 2 11 24]
[ 4 7 24]]
axis主要看shape,shape是[2,4,3]
axis为0是加最外面的2个,得出结果4,3
axis为1是加最中间的4个,得出结果2,3
axis为2是加最里面的3个,得出结果2,3

21的矩阵,12的矩阵没问题,主要是看shape。[[3,3]]最外面是1个,里面2个3



placeholder容器,保存图片数据,参数变量在variable。
padding指填充。以及Tensorflow里面参数参考见:
https://blog.csdn.net/jacke121/article/details/78867082
一般我们把dropout用在全连接层。