Machine Learning

一、Reinforcement Learning 强化学习
  抛弃人类经验”和“自我训练”并非AlphaGo Zero最大的亮点,其关键在于采用了新的reinforcement learning(强化学习的算法),并给该算法带了新的发展。
AlphaGo Zero仅拥有4个TPU,零人类经验,其自我训练的时间仅为3天,自我对弈的棋局数量为490万盘。但它以100:0的战绩击败前辈。
 
二、Unsupervised Learning 无监督学习
  要学习的问题在你学习之间没有固定的答案,希望算法对特定的输入信息进行自动化的学习来达到了解这些数据内部一些固定结构的目的。特点是这些训练样本在训练之前是没有被标定的,没有准确的答案,也没有准确的办法去检测我们的学习是不是对,只能说找到一个比较好的解决方案,不能说找到一个固定标准。 K-means算法。
    
      是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。 
 
三、 Supervised Learning 有监督学习
  学习之前,对收集来的数据已经有了特定的答案,希望训练出一种算法,对将来收集到的数据进行判断
 
1、传统算法:
  SVM(Support Vector Machine)
  基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。
  SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。
 
2、 ANN(Artificial Neural Network)
  Single-layer perceptron
  Multi-layer perceptron
  BP neural network
 
3. Tensorflow (多维数据,张量,在图里流动)
  Tensorflow是一个有向图的集合
  Placeholder 给定的输入,放输入的地方
  Variables 要训练一个神经网络,用来训练的所有的自由参数,要优化的目标
  • weight 权重
  • biases 偏置
归一化
---------------------------------------------------------------------------------------------
ML Training
 
机器学习数学算法分为四类:
 
一、线性回归 Linear Regression
已知三个点,求一条直线,用解析几何来做回归,要点数足够多。点数少了欠拟合,点数多了叫过拟合。
 
三个函数:
1. 激活函数 :(预测函数 )
  sigmoid是非线性的, relu是线性的,tanh

2. 损失函数 :(代价函数)
  平方损失函数(最小二乘法)
  log对数损失函数(逻辑回归)
  指数损失函数(Adaboost)
  https://www.cnblogs.com/shixiangwan/p/7953591.html

3. 优化算子 : 大部分时候GradientDescentOptimizer足够了
  GradientDescentOptimizer
  AdamOptimizer
  https://www.jianshu.com/p/d99b83f4c1a6

 
H(x)是Y的预测值,cost = 对(H(xi) - Yi)的平方求和/N,让这个值最小,就是拟合的过程
ReduceMean()就是干这个的
 
二、逻辑回归 Logic Regression
(人为的设计一个概率值(eg.0.5),把连续的函数变成了二分类 true or false)
交叉熵(crossentropy),信号处理 IIR (冲击响应)FIR (无限冲击响应,反馈模型,当前的输出不仅和当前的输入有关系,还和上一个状态有关系)
当交叉商最的时候,H(x)最接近真实的概率
 
shape=[None, 2]
数据过多,十万个,要用batch分批
训练集,验证集
 
hypothesis
predicted
accuracy
 
 
三、多分类 Softmax classification (前身是SVM, 森林,决策树......过气了)
损失函数变了,依然是交叉商理论
cost = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(hypothesis), axis=1))
 
四、神经网络 Neural Networks
One_Hot = True 只有一个值为1,One_Hot是一种编码 1 = 000001, 2 = 000010
 
XOR:异或门的例子,不收敛,没有梯度,梯度消失,梯度弥散
核心问题是:用一阶逻辑去表达二阶逻辑,那是不可能的
 
在神经网络加宽加深的效果来看,结果越来越精细,所以Deep Learning, 也是Wide Learning
 
CNN:
激活函数变成了卷积CONV
2012 Yann LeCun, Bengio, Hinton
 
Relu 层: 避免过拟合
池化层: 相邻点之间的关系并不重要,隔几个点之间的关系更重要,是提炼共性,起到了降维的作用
Max Pooling:块中取最大值
降维只有两个地方:1. 调整卷积核的步长 2. 池化层
 
卷积和池化:用抽象的特征值来分类
 
4K,图像越高清,能提取出来的特殊值越多
卡尔漫滤波,贝叶斯
LeCun 1998 : LeNet-5
 
Image,图像
Filter, 卷积核
Stride, 步长
Padding,插值
 
CNN第一步卷积后变成几块,由卷积核的个数确定,这个可以自己决定,卷积核的值是随机取的,开始的时候预测准确率不高
 
 
RNN:
RNN也是CNN,只是把时间当作一维信息考虑进去了
 
learning_rate = 0.1 学习梯度下降率
epochs = 批次为500
 
 
py -3 web.py 起一个web server
 
语音识别: RNN
图像识别: CNN
目标识别: R-CNN,Fast R-CNN, Faster R-CNN  
图像中挖掘语义: CNN +RNN
 
LSTM: Long Short Term Memory, 是最有代表性的RNN,最新的
激活函数是BasicLSTMCell
损失函数是dynamic_rnn
优化算子是Adam
 
char-rnn
 
Tensorboard 用来做可视化窗口
tensorboard --logdir = ./logs/
 
在chrome中打开: http://juyun:6006
 
 
一些小细节:
语义 RNN
稀疏: 用少量的数据,生成更多的数据
边缘计算,在节点处完成计算, 英伟达 TS1ARM+CUDA,碾压海康的TI SVM多摄象头
 
 
一些框架:
keras tensorflow caffe
MXNet --- Amazon AI
TensorFlow --- Google Framework
PyTorch --- Fackbook AI Research
CNTK --- Microsoft
  
https://www.tensorflow.org/install/install_sources
 
CUDA驱动,1.4以下的要装8, 1.4以上要装9
cuda_8.0.44
cuda_9.0.176
cudnn-8.0
cudnn-9.0
 
 
 
过拟合: 两张图像去比对,必须一模一样才能......
梯度下降是一个求微分的过程
卷积是一个求积分的过程
 
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
pip3 install jupyter notebook
 
 
python的四种数据类型:
list 允许数据类型不一致 [a,b,c]
dictionary {key:value}
tuple ()
set {val1, val2}
 
 
num1 = [1,2,3]
num2 = num1 #浅拷贝
num3 = num2.copy() #深拷贝
hex(id(num1)) = hex(id(num2)) != hex(id(num3))
 
 
稀疏:提前提炼出有用的信息,过滤掉冗余的信息,例如人脸检测中只要人脸的数据
 
desmos可用来画图像
 
 
标签: 结果,用来训练的0,1
 
复用:
saver.save()
saver.restore(sess.ckpt.model_checkpoint_path)
 
nn.dropout()可以用来解过拟合Overfitting的问题
 
 
 

交叉熵(crossentropy)

原文地址:https://www.cnblogs.com/awiki/p/9527209.html