我爱编程

Deep Learning

2018-04-08  本文已影响0人  Babus

1.机器学习中数学基础

二次型矩阵:

https://wenku.baidu.com/view/b3a01ed2b9f3f90f76c61ba2.html

利用矩阵的写法可以很方便的表示


image.png

泰勒级数

image.png

梯度相关:https://www.cnblogs.com/pinard/p/5970503.html

概率部分

贝叶斯实例:


image.png

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. 从线性分类器到人工神经网络

线性分类器得分函数:

image.png
image.png

两种损失函数的理解

感知器

非线性分割中的优势


image.png image.png
image.png

传递函数

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


image.png image.png

激活函数:对信号做筛选,看要不要让一些打断你的信号过去。

BP算法

需要利用这个算法去传递每一层中的误差来不断修正他。
正向传播举例:我们需要去做很多题目,根据她的错误等来指导自己的学习。
反向传播举例:根据得出的结果,去找为什么犯错,去解决这个问题。


image.png

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


image.png image.png

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

例子:

image.png

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

根据求导的链式法则去求导


image.png
image.png image.png image.png

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会非常多,运算量非常大。

image.png

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


image.png

- 数据层

有关输入数据的几种操作方式:

  1. 归一
  2. 去均值(例如我们去区分很多颜色,如果他主要有偏红的颜色,我们去了均值就有正有负)
  3. PCA/白化
    https://blog.csdn.net/zkp_987/article/details/78684855
image.png
一般对于图像而言,我们就只用到第一种。因为不需要去均值。例如2772773(像素点先是277*277的矩阵,3是三个颜色通道RGB)

数据层处理完毕之后来到CONV层(卷积计算层)

- 卷积层

卷积计算层:

  1. depth理解为:有多少人去看了这个图片。要有大家的意见汇总才能有意义才能看到东西。
  2. 步长:每个人看到的是一个窗口,要来利用窗口的滑动,步长指窗口滑动多少。
  3. 填充值:例如我是一个32323 我现在用4*4的窗口来看,不能刚好从最左到最右,所以我们需要去补0.
    不断去滑动。

5个小朋友,每个人都有一个世界观,第1位小朋友便用她的世界观(她的w)去看第一个3*3的窗口,然后利用窗口


image.png image.png

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


image.png
image.png

- 激励层

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


image.png image.png image.png
image.png

- 池化层

作下采样:往下采样,保存图片中的大量信息。

相当于找一个小朋友来总结这几个要点,依旧去看每个小块,取出每个小块最重要的东西。依旧是一个窗口在滑动,看你需要降到什么程度。
1.max:看最大的信息
2.avg:用平均数据

- 全连接层

image.png

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


image.png

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


image.png image.png
image.png image.png

数据量大可以减缓过拟合。

正则化与Dropout(?不太明白)

用来约束和缓解过拟合。l1,l2也是一些正则化方式。

Dropout是指随机失活,用了之后,比如dropout为0.5


image.png

u1生成一个随机数组去取舍,把小于0.5的部分都留下来。下来是他的数学期望。将这些保留下来的数字与H1去做点乘。

我们需要预测的时候结果快,所以我们预测的时候就不要去算p,把这个p给放在模型训练的时候去。

image.png

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


image.png
image.png

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

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

框架示例

image.png
image.png

caffe使用方式

image.png

caffe当中学习率有两个,全局学习率和每一层学习率。最终的学习率是由每一层的学习率全局的。因为这层有w和b,有偏执项,相当于是把w和b独立给了这两个blobslr。分别指w和b的学习率。
numoutput指:相当于上节课的depth,多少个小朋友多少个神经元。有多少的卷积和,相当于有多少的小朋友去看。
kernelsize:滑动窗口大小5
%
stride:滑动步长
weightfiller与biasfiller是去初始化w和b的权重。定义的是几种初始化的方式。

image.png

有些时候我们用别人的模型的时候可以把前面层次的学习率调低(因为他们已经做得很完善了)我们只需要调整后面的

在这里去定义全局的学习率。iter和interval分别表示训练集要训练多少轮和验证集需要多少轮。lr-policy表示用什么方式去做优化,此时表示的step,梯度下山法。stepsize:步长,display指多少轮之后做一次信息的展示。snapshot:害怕有服务器断电的情况,保留状态,表示每过1w轮保存一次权重。以方便重新加载。

image.png image.png

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


image.png image.png

finetuning 微调
一个示例:
http://www.cnblogs.com/louyihang-loves-baiyan/p/5038758.html

python里面的步骤

image.png image.png

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


image.png

一个py的预测示例


image.png

可视化网络结构


image.png

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

Tensorflow使用方式

image.png image.png

补充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

image.png

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

image.png image.png image.png

placeholder容器,保存图片数据,参数变量在variable。
padding指填充。以及Tensorflow里面参数参考见:
https://blog.csdn.net/jacke121/article/details/78867082

一般我们把dropout用在全连接层。

MxNet

上一篇下一篇

猜你喜欢

热点阅读