note
2.图像分类
self.X_train - X[i, :] 训练集矩阵中每行都减去 测试集的第i行 (临时) np.square(self.X_train - X[i, :]) 返回 每个元素都平方后的矩阵 np.sum(np.square(self.X_train - X[i, :]), axis=1) 对每行进行求和, 最后得到 一个 1 * 5000 的矩阵 ! axis = 0 沿着 纵轴对矩阵进行操作, axis = 1 沿着 横轴对 矩阵进行操作, 如果不指定 则会对所有元素进行操作 np.sqrt(np.sum(np.square(self.X_train - X[i, :]), axis=1)) : 数组中每个元素都进行开方 双循环和单循环所完成的任务是一样的
Nearest Neighbor分类器在某些特定情况(比如数据维度较低)下,可能是不错的选择。但是在实际的图像分类工作中,很少使用。因为图像都是高维度数据(他们通常包含很多像素),而高维度向量之间的距离通常是反直觉的——使用像素差异来比较图像是不够的,图片的排列是被背景主导而不是图片语义内容本身主导
SVM
升维——>维度转换函数——>SVM
Kernel Trick 获得高纬度差异
正则化:
希望能向某些特定的权重W添加一些偏好,对其他权重则不添加,以此来消除模糊性。这一点是能够实现的,方法是向损失函数增加一个正则化惩罚(regularization penalty)R(W)部分
L2范式通过对所有参数进行逐元素的平方惩罚来抑制大数值的权重,引入了L2惩罚后,SVM们就有了最大边界(max margin)这一良好性质
SVM和Softmax的比较
最优化:
计算梯度有两种方法:一个是缓慢的近似方法(数值梯度法),但实现相对简单。另一个方法(分析梯度法)计算迅速,结果精确,但是实现时容易出错,且需要使用微分
梯度指明了函数在哪个方向是变化率最大的,但是没有指明在这个方向上应该走多远
小批量数据梯度下降
小批量数据策略有个极端情况,那就是每个批量中只有1个数据样本,这种策略被称为随机梯度下降(Stochastic Gradient Descent 简称SGD)
理解并能计算损失函数关于权重的梯度,是设计、训练和理解神经网络的核心能力
作为线性分类器的单个神经元
二分类Softmax分类器,基准是神经元的输出是否大于0.5
二分类SVM分类器,在神经元的输出外增加一个最大边界折叶损失(max-margin hinge loss)函数,将其训练成一个二分类的支持向量机
理解正则化,效果是让所有突触权重w在参数更新过程中逐渐向着0变化
sigmoid函数缺点:
饱和使梯度消失
输出不是零中心的
反向传播:
利用链式法则递归计算表达式的梯度的方法
任何可微分的函数都可以看做门。可以将多个门组合成一个门,也可以根据需要将一个函数分拆成多个门
激活函数:
负责将来自节点的加权输入转换为该输入的节点或输出的激活
在大型网络深层使用这些非线性激活函数不能接收有用的梯度信息。错误通过网络传播回来,并用于更新权重。每增加一层,错误数量就会大大减少。这就是所谓的消失梯度 问题,它能有效地阻止深层(多层)网络的学习
ReLu:
if input > 0: return input else: return 0 # rectified linear function def rectified(x): return max(0.0, x)
浙公网安备 33010602011771号