第二周 神经网络基础
打卡(1)
2.1 二分类
在二分分类问题中 目标是训练处一个分类器,它以图片(本例中)的特征向量X作为输入,来预测输出的结果标签y是1还是0,也就是预测图片中是否有猫。
课程中会用到的数学符号:
- :表示一个单独的样本;
- :表示x是 维的特征向量;
- {0, 1} :标签y值为0或1;
- 训练集有m个训练样本构成: 表示样本一的输入和输出; 表示样本二的输入和输出… ,这些样本整个一起就表示训练集,m表示训练样本的个数。 ;
- 神经网络中构建的输入矩阵
中,通常行表示样本数; 列表示特征维度。
2.2 logistic回归
(向量
一般默认为列向量,转置为行向量)
* sigmoid函数的函数值
{0,1},且当自变量趋近负无穷大时,函数值趋近为0; 当自变量趋近为正无穷大是,函数值趋近为1.
* 神经网络中,特征参数向量
和截距
通常看做独立的参数,不像红色公式中那样表达会更好(红色公式在本课程中不会使用)
2.3 logistic回归损失函数
logistic的损失函数是:
(logistic的损失函数之所以不用
是因为这个损失函数在使用梯度下降法时可能会产生非凸优化问题)。
* 损失函数适用于单个训练样本;而成本函数是基于参数的总成本,在训练logistic模型时,我们要找到合适的参数
和
,就是找到让的成本函数
尽可能小的
和
。
打卡(2)
2.4 梯度下降法
通过梯度下降法求解使得成本函数最小的参数向量
和截距
。
* 编写代码时
的对
的偏微分用
表示,
的偏微分用
表示
2.5 导数
(略)
2.6 更多的导数例子
(略)
2.7 流程图
* 流程图是用蓝色箭头画出来的,从左到右的计算
* 流程图的导数是用红色箭头画出来的,从右到左
2.8 流程图的导数计算(反向传播)
2.9 logistic回归中的梯度下降
*
,
其中,
打卡(3)
2.10 m个样本的梯度下降
2.11 向量化
,
其中,
都是列向量;
代码表示为:
z=np.dot(w,x)
import numpy as np
a=np,array([1,2,3,4])
print(a)
>>>[1 2 3 4]
import time
a= np.random.rand(1000000)
b= np.random.rand(1000000)
tic=time.time()
tic=np.dot(a,b)
toc=time.time()
print("vectorized version:"+str(1000*(toc-tic))+"ms")
向量化计算,比循环遍历计算速度快很多。
SIMD:并行计算(在GPU和CPU都行)
2.12 向量化的更多例子
Python中实现将
,转换成
,可以用向量化方法(避免循环遍历)。
import numpy as np
u=np.exp(v)
np.log(v)
np.abd(v)
np.maxnum(v,0)
v**2 #v中的每个元素平方
1/v #v中的每个元素的导数
2.13 向量化logistic回归
2.14 向量化logitici回归的梯度计算
2.15 python中的广播
(略)
2.16 关于Python/numpy向量说明
编写神经网络程序是,最好不要用1维数组,用矩阵
a=np.random.randn(5)
a.shape
>>>>(5,) #这不属于矩阵
创建向量时,把向量定义为列向量易于运算
a=np.random.randn(5,1)
a.shape
>>>>(5,1) #列向量
assert(a.shape==(5,1)) 声明矩阵的维度
2.17 Jupter/Ipython笔记本的快速指南
(略)
2.18 logistic损失函数的解释
- 损失函数:
- 成本函数: