神经网络编程基础
1. 符号定义
- x x x: 表示一个 n n n维数据,为输入数据,维度为 ( n , 1 ) (n,1) (n,1);
- y y y: 表示输出结果
- ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)): 表示第 i i i组数据
- X = [ x ( 1 ) , x ( 2 ) , . . . , x ( m ) ] X = [x^{(1)}, x^{(2)}, ..., x^{(m)}] X=[x(1),x(2),...,x(m)]: 表示输入值,为 n × m n\times m n×m的矩阵, 其中 m m m表示样本数目
- Y = [ y ( 1 ) , y ( 2 ) , . . . , y ( m ) ] Y = [y^{(1)}, y^{(2)}, ..., y^{(m)}] Y=[y(1),y(2),...,y(m)]: 表示输出值(标签),为 1 × m 1\times m 1×m的向量
X X X, Y Y Y 均是通过将样本按照列堆叠起来,这在实现神经网络时会使实现过程变得简单;而有时候可能对矩阵 X X X通过将样本按照行堆叠而实现。
(1)
X
=
[
⋮
⋮
⋮
⋮
x
(
1
)
x
(
2
)
⋯
x
(
m
)
⋮
⋮
⋮
⋮
]
X = \left[ \begin{matrix} \vdots & \vdots & \vdots &\vdots \\ x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\ \vdots & \vdots & \vdots &\vdots \\ \end{matrix} \right] \tag{1}
X=⎣⎢⎢⎡⋮x(1)⋮⋮x(2)⋮⋮⋯⋮⋮x(m)⋮⎦⎥⎥⎤(1)
(2)
Y
=
[
y
(
1
)
y
(
2
)
⋯
y
(
m
)
]
Y = \left[ \begin{matrix} y^{(1)} & y^{(2)} & \cdots & y^{(m)} \\ \end{matrix} \right] \tag{2}
Y=[y(1)y(2)⋯y(m)](2)
X.shape = (n,m)
Y.shape = (1,m)
2. Python基础
numpy包
- axis = 0 or 1
A.sum(axis = 0),axis 用来指明将要进行的运算是沿着哪个轴执行,在 numpy 中,0 轴是垂直的,也就是列,而 1 轴是水平的,也就是行。 - reshape()
当我们写代码时不确定矩阵维度的时候,通常会对矩阵进行重塑来确保得到我们想要的列向量或行向量。重塑操作 reshape 是一个常量时间的操作,时间复杂度是?(1),它的调用代价极低。 - 广播机制(broadcasting)
- 如果两个数组的后缘维度的轴长度相符或其中一方的轴长度为 1,则认为它们是广播兼 容的。广播会在缺失维度和(或)轴长度为 1 的维度上进行。
后缘维度(trailing dimension),即从末尾开始算起的维度
- 确保 矩阵维度 的准确性
- 加入 assert 断言语句,如assert(a.shape == (5,1))
- 常使用 reshape 操作
3. 逻辑回归
sigma函数
(3) σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} \tag{3} σ(z)=1+e−z1(3)
损失函数 VS 代价函数
- 损失函数(loss function),是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何。
逻辑回归的损失函数是:
(4) L ( y ^ , y ) = − y log ( y ^ ) − ( 1 − y ) log ( 1 − y ^ ) L(\hat{y}, y)=-y\log(\hat{y})-(1-y)\log(1-\hat{y}) \tag{4} L(y^,y)=−ylog(y^)−(1−y)log(1−y^)(4)
有很多的函数效果和现在这个类似,就是如果 y y y 等于1,我们就尽可能让 y ^ \hat{y} y^ 变大,如果 y y y 等于0,我们就尽可能让 y ^ \hat{y} y^ 变小。
- 代价函数(cost function),衡量算法在全部训练样本上的表现如何,是参数的总代价。
逻辑回归的代价函数是:
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) = 1 m ∑ i = 1 m ( − y log ( y ^ ) − ( 1 − y ) log ( 1 − y ^ ) ) J(w,b)=\frac{1}{m}\sum_{i=1}^mL\big(\hat{y}^{(i)},y^{(i)}\big)=\frac{1}{m}\sum_{i=1}^m\big(-y\log(\hat{y})-(1-y)\log(1-\hat{y})\big) J(w,b)=m1i=1∑mL(y^(i),y(i))=m1i=1∑m(−ylog(y^)−(1−y)log(1−y^))
逻辑回归可以看做是一个非常小的神经网络
4. 向量化
- 经验法则是,无论什么时候,避免使用明确的 for 循环。
5. L1和L2损失函数
L1 loss function
(6) L 1 ( y ^ , y ) = ∑ i = 0 m ∣ y ( i ) − y ^ ( i ) ∣ L_1(\hat{y}, y) = \sum_{i=0}^m|y^{(i)} - \hat{y}^{(i)}| \tag{6} L1(y^,y)=i=0∑m∣y(i)−y^(i)∣(6)
L2 loss function
(7) L 2 ( y ^ , y ) = ∑ i = 0 m ( y ( i ) − y ^ ( i ) ) 2 L_2(\hat{y},y) = \sum_{i=0}^m(y^{(i)} - \hat{y}^{(i)})^2 \tag{7} L2(y^,y)=i=0∑m(y(i)−y^(i))2(7)