机器学习、深度学习基本概念简介及Pytorch教学
1.机器学习任务
机器学习任务不只是有回归问题和分类问题,还有结构化学习。
Structured Learning — create something with structure(image,document),即文本生成、图像生成。
2.Loss
1.平均绝对误差-Mean Absolute Error—MAE
2.均方误差-Mean Square Error-MSE-用于线性回归
3.均方根误差-Root Mean Square Error-MSE-用于线性回归
4.交叉熵-Cross-entropy-用于分类
当y和y_pred都是概率分布值的话,会选用交叉熵。
3.Sigmoid激活函数的引入
红色曲线可以看做是一个常数项加上一大堆的蓝色的Function。
常数项设置的值,就是红色线跟y轴的交点。
线0 + 线1 ,就能得到红色线第一段的函数。
线0 + 线1 + 线2, 就能得到红色线前两段的函数。
线0 + 线1 + 线2 + 线3 , 就能得到红色线函数。
经过上述举例,我们发现,无论是多么复杂的分段函数,都可以用一个常数项和一大堆不一定一样的Function组合而成。
同样的,这个理论也适用于曲线,当我们的点取得足够多,有更多的Function,就能很好的拟合曲线。(用分段函数逼近曲线,用Function构造分段函数☺)

问:而这些蓝色的Function怎么表示呢?
我们可以用Sigmoid函数去逼近它。
所以,任何的曲线,都可以用一堆sigmoid函数加一个常数项逼近。这就是,为什么在神经网络中,我们要使用sigmoid激活函数。即用一堆sigmoid函数逼近分段函数,用分段函数逼近曲线。
4.理解Sigmoid函数
由3可知,对于任意一条曲线,我们都可以通过如下函数进行拟合。其中sigmoid函数中的求和项的意思是不只一个特征。比如,今天的温度不仅受今天的影响,还和前面28天有关,那样的话, 我们就有28个特征。j就等于28。

这里,我们的未知参数包括,W、b、C以及b,第一个b是向量,第二个b是标量。
然后,我们可以将所有的这些参数竖着放,统称为θ。
5.ReLU与Hard Sigmoid
一个Hard Sigmoid 可以由两个ReLU来构成。
因为两个ReLU才相当于一个sigmoid,所以,原来使用sigmoid作为激活函数的拟合函数可以用双倍ReLU代替。
6.从单层到多层
7.Tensor(张量)
- 是一个高维度的矩阵(array)

这里注意,如果是一个一维张量,它的shape应该是(x, ),只有一个数字。
创建Tensor的方式
- 从一个列表中创建、或从一个numpy数组中创建
- x = torch.tensor([[1, -1], [2, 2]])
- x = torch.from_numpy( np.array([[1, -1], [2, 2]]) )
- 创建0矩阵
- x = torch.zeros([2, 2])
- 创建单位矩阵
squeeze(arg)表示第arg维的维度值为1,则去掉该维度。否则tensor不变。(即若tensor.shape()[arg] = 1,则去掉该维度)

unsqueeze(arg)与squeeze(arg)作用相反,表示在第arg维增加一个维度值为1的维度。
2.Tensor矩阵的转置-transpose()
3.Tensor矩阵的拼接-cat(list)

- 从一个列表中创建、或从一个numpy数组中创建
4.计算梯度
5.加载数据集-Dataset与DataLoader
具体可去之前记录的刘二大人的Pytorch深度学习实践课程笔记中查看。
6.定义一个神经网络
1.定义一个全连接网络 - torch.nn.Linear(in_features, out_features)
通过 对象.weight, 对象.bias查看参数
7.Loss函数
nn.MSELoss用于线性回归
nn.CrossEntropyLoss用于分类
8.optim函数
torch.optim.SGD(params, lr, momentum=0)
9.训练过程
10.评估过程-验证集和测试集
8.神经网络的定义
我们可以通过torch.nn.Sequential()方法,将每一层要做的处理按顺序添加进去,封装成一个对象,然后在forward方法里直接调用这个对象即可。不用对每一层用到的模型逐个定义并赋给变量,然后再在forward里逐个调用变量。
9.深度学习简介
1.特征提取
隐藏层所做的工作就是不断地抽象出更高层的特征。可以把隐藏层当做特征提取器。
从以前的人工设计一些特征提取器,到现在我们把所有的特征丢到DNN中,让它自己学习。
我们的问题从人工抽取特征转换成了要设计多少层神经网络以及每层神经网络有多少个神经元的问题。
2.DNN应用领域及效果
DNN在语音识别和图像识别领域应用效果比较好,而在NLP领域的效果相对没有那么突出(可以理解为人在做NLP的任务时,人的水平是比较强的,如情感分析)。
3.FAQ
1.hidden layer 和hidden units怎么选?
根据经验
2.隐藏层的结构可以自动构造吗?
可以,如evolutionary artificial neural networks(进化人工神经网络),不过这个还是在探索阶段。
3.我们可以设计神经网络结构吗?即不用全连接神经网络
可以,如CNN
4.DNN的一些框架
pytorch、tensorflow、Caffe、CNTK。他们都可以帮助我们做反向传播的工作,所以,我们需要做的就是设计神经网络的结构。





