deeplearning.ai学习笔记:第一课第二周

1 二分类

m样本数目,n样本特征数目
建议使用的符号表示

X = [ ∣ ∣ ∣       x ( 1 ) x ( 2 ) ⋯ x ( m )       ∣ ∣ ∣ ] ∈ R n × m       y = [ y ( 1 ) y ( 2 ) ⋯ y ( m ) ] ∈ R 1 × m X = \left[\begin{matrix} | & | &&& | \\ ~& ~&&& ~ \\ x^{(1)} & x^{(2)} &\cdots&& x^{(m)} \\ ~& ~&&& ~ \\ | & | &&& | \end{matrix}\right] \in R^{n \times m} \\ ~~\\ ~~ \\ y = \left[\begin{matrix} y^{(1)} & y^{(2)} &\cdots&& y^{(m)} \end{matrix}\right] \in R^{1 \times m} X= x(1)  x(2)  x(m) Rn×m    y=[y(1)y(2)y(m)]R1×m

2 logistic regression

二分类算法,目的是最小化预测结果和真实结果之间的误差。

给定 x ∈ R n x \in R^n xRn,目的是得到 y ^ = P ( y = 1 ∣ x ) , 0 ≤ y ^ ≤ 1 \hat{y} = P(y=1|x), 0 \leq \hat y \leq 1 y^=P(y=1x),0y^1

输入: x ∈ R n x \in R^n xRn
输出: y ∈ { 0 , 1 } y \in \{0,1\} y{0,1};
参数: W ∈ R n W \in R^n WRn
偏置: b ∈ R b \in R bR
输出: y ^ = σ ( W T x + b ) \hat y = \sigma(W^Tx+b) y^=σ(WTx+b)
激活函数:sigmoid, σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1
在这里插入图片描述 z → + ∞ , σ ( z ) → 1 z \rightarrow +\infty,\sigma(z) \rightarrow 1 z+,σ(z)1;
z → − ∞ , σ ( z ) → 0 z \rightarrow -\infty,\sigma(z) \rightarrow 0 z,σ(z)0;
z = 0 , σ ( z ) = 0.5 z = 0,\sigma(z) = 0.5 z=0,σ(z)=0.5

3 logistic regresstion cost function

loss function:在单个样本上定义的损失,衡量的是在单个训练样本上的表现;
cost function:在整个训练集上定义的损失,衡量的是在整个训练集上的表现。

logistic regression loss function:
L ( y ( i ) , y ^ ( i ) ) = − ( y ( i ) log ⁡ ( y ^ ( i ) ) + ( 1 − y ^ ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) ) L(y^{(i)},\hat{y}^{(i)}) = - (y^{(i)}\log(\hat{y}^{(i)})+(1-\hat{y}^{(i)})\log(1-\hat{y}^{(i)})) L(y(i),y^(i))=(y(i)log(y^(i))+(1y^(i))log(1y^(i)))
  ~  
y ( i ) = 0 , L ( y ( i ) , y ^ ( i ) ) = − log ⁡ ( 1 − y ^ ( i ) ) y^{(i)} = 0,L(y^{(i)},\hat{y}^{(i)})=-\log(1-\hat{y}^{(i)}) y(i)=0,L(y(i),y^(i))=log(1y^(i)),为了尽可能减小 L ( y ( i ) , y ^ ( i ) ) L(y^{(i)},\hat{y}^{(i)}) L(y(i),y^(i)),需要 1 − y ^ ( i ) 1-\hat{y}^{(i)} 1y^(i)越大越好,也就是需要 y ^ ( i ) \hat{y}^{(i)} y^(i)越小越好,而 y ^ ( i ) ∈ { 0 , 1 } \hat{y}^{(i)} \in \{0,1\} y^(i){0,1},因此,即希望 y ^ ( i ) \hat{y}^{(i)} y^(i)=0;
  ~  
y ( i ) = 1 , L ( y ( i ) , y ^ ( i ) ) = − log ⁡ ( y ^ ( i ) ) y^{(i)} = 1,L(y^{(i)},\hat{y}^{(i)})=-\log(\hat{y}^{(i)}) y(i)=1,L(y(i),y^(i))=log(y^(i)),为了尽可能减小 L ( y ( i ) , y ^ ( i ) ) L(y^{(i)},\hat{y}^{(i)}) L(y(i),y^(i)),需要 y ^ ( i ) \hat{y}^{(i)} y^(i)越大越好,而 y ^ ( i ) ∈ { 0 , 1 } \hat{y}^{(i)} \in \{0,1\} y^(i){0,1},因此,即希望 y ^ ( i ) \hat{y}^{(i)} y^(i)=1。

训练样本集的cost function:
J ( W , b ) = 1 m ∑ i = 1 m L ( y ( i ) , y ^ ( i ) ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( y ^ ( i ) ) + ( 1 − y ^ ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) ] J(W,b)=\frac{1}{m}\sum_{i=1}^{m}L(y^{(i)},\hat{y}^{(i)})=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log(\hat{y}^{(i)})+(1-\hat{y}^{(i)})\log(1-\hat{y}^{(i)})] J(W,b)=m1i=1mL(y(i),y^(i))=m1i=1m[y(i)log(y^(i))+(1y^(i))log(1y^(i))]
训练logistic regression模型时,目的是找到cost function最小时的W和b。

为什么代价函数是这个样子呢?
对于logistic regression,已知模型给出的是当前样本属于正样本的预测概率;如果当前单个训练样本的ground truth=1,则 p ( y ∣ x ) = y ^ p(y|x)=\hat y p(yx)=y^;若当前单个训练样本的ground truth=0,则 p ( y ∣ x ) = 1 − y ^ p(y|x)=1 - \hat y p(yx)=1y^。对于正样本而言,我们希望模型预测该样本为正样本的概率越大越好,即 y ^ \hat y y^越大越好;而对于负样本,我们希望模型预测该样本为负样本的概率越大越好,即 1 − y ^ 1 - \hat y 1y^越大越好,同样是 y ^ \hat y y^越大越好。因此,把这两种情况合并起来,得到了表达式:
p ( y ∣ x ) = y ^ y + ( 1 − y ^ ) ( 1 − y ) p(y|x)={\hat y}^y+(1 - \hat y)^{(1 - y)} p(yx)=y^y+(1y^)(1y)
对于上式,若y=1,则 p ( y ∣ x ) = y ^ p(y|x)={\hat y} p(yx)=y^;若y=0,则 p ( y ∣ x ) = 1 − y ^ p(y|x)={1 - \hat y} p(yx)=1y^。和原来的预期结果是一致的。

由于对于m个样本组成的训练集来说,样本之间独立同分布,所以为了求得一组参数使得这一组样本的估计值都尽可能的准确,我们需要使该样本集的联合概率越大越好,即最大化 Π i = 1 m p ( y ( i ) ∣ x ( i ) ) \Pi_{i=1}^mp(y^{(i)}|x^{(i)}) Πi=1mp(y(i)x(i))。而由于log函数为单独递增函数,最大化 Π i = 1 m p ( y ( i ) ∣ x ( i ) ) \Pi_{i=1}^mp(y^{(i)}|x^{(i)}) Πi=1mp(y(i)x(i))和最大化 log ⁡ Π i = 1 m p ( y ( i ) ∣ x ( i ) ) \log \Pi_{i=1}^mp(y^{(i)}|x^{(i)}) logΠi=1mp(y(i)x(i))可以得到同样的最优解,但是把乘积运算变成了求和运算,计算更加简单。因此,目的就变成了最大化 log ⁡ Π i = 1 m p ( y ( i ) ∣ x ( i ) ) \log \Pi_{i=1}^mp(y^{(i)}|x^{(i)}) logΠi=1mp(y(i)x(i)),也就是极大似然估计。

而对于代价函数来说,我们目的是要最小化它的,因此,这里加一个符号,变成最小化 − log ⁡ Π i = 1 m p ( y ( i ) ∣ x ( i ) ) -\log \Pi_{i=1}^mp(y^{(i)}|x^{(i)}) logΠi=1mp(y(i)x(i))。而添加一个系数 1 m \frac{1}{m} m1纯粹是为了计算方便。

综上,我们最终想要最小化的代价函数为:
J ( W , b ) = 1 m ∑ i = 1 m L ( y ( i ) , y ^ ( i ) ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( y ^ ( i ) ) + ( 1 − y ^ ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) ] J(W,b)=\frac{1}{m}\sum_{i=1}^{m}L(y^{(i)},\hat{y}^{(i)})=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log(\hat{y}^{(i)})+(1-\hat{y}^{(i)})\log(1-\hat{y}^{(i)})] J(W,b)=m1i=1mL(y(i),y^(i))=m1i=1m[y(i)log(y^(i))+(1y^(i))log(1y^(i))]

4 梯度下降

在这里插入图片描述
随机初始化参数,得到一个初始的J(W,b),在每一点处沿着梯度最大的方向前进,逐步减小J(W,b)的值,下降路径如上图红色箭头所示。最终收敛到全局最优解。

在这里插入图片描述最优解右侧,梯度大于0,减梯度,w向左侧移动;
最优解左侧,梯度小于0,减梯度,w向右侧移动。

更新规则:
repeat
{
w := w - α   d w \alpha~dw α dw
b := b - α   d b \alpha~db α db
}

5 计算图

在这里插入图片描述

6 logistic regression梯度计算

在这里插入图片描述

在这里插入图片描述
基于m个样本进行logistic regression的训练:

初始化:
J = 0 ; d W 1 = 0 ; d W 2 = 0 ; d b = 0 ; J = 0;dW_1=0;dW_2=0;db = 0; J=0;dW1=0;dW2=0;db=0;

单次梯度下降更新:
f o r   i = 1   t o   m : for ~i = 1~to ~m: for i=1 to m:
        z ( i ) = W T x ( i ) + b ~~~~~~~z^{(i)}=W^Tx^{(i)}+b        z(i)=WTx(i)+b
        a ( i ) = σ ( z ( i ) ) ~~~~~~~a^{(i)}=\sigma(z^{(i)})        a(i)=σ(z(i))
        J + = − [ y ( i ) log ⁡ ( a ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − a ( i ) ) ] ~~~~~~~J += -[y^{(i)}\log(a^{(i)})+(1-y^{(i)})\log(1-a^{(i)})]        J+=[y(i)log(a(i))+(1y(i))log(1a(i))]
        d z ( i ) = a ( i ) − y ( i ) ~~~~~~~dz^{(i)}=a^{(i)} - y^{(i)}        dz(i)=a(i)y(i)
        d W 1 + = d z ( i ) x 1 ~~~~~~~dW_1 += dz^{(i)}x_1        dW1+=dz(i)x1
        d W 2 + = d z ( i ) x 2 ~~~~~~~dW_2 += dz^{(i)}x_2        dW2+=dz(i)x2
        d b + = d z ( i ) ~~~~~~~db += dz^{(i)}        db+=dz(i)
J / = m J /= m J/=m
d W 1 / = m dW_1 /= m dW1/=m
J W 2 / = m JW_2 /= m JW2/=m
W 1 = W 1 − α   d W 1 W_1 = W_1 - \alpha~dW_1 W1=W1α dW1
W 2 = W 2 − α   d W 2 W_2 = W_2 - \alpha~dW_2 W2=W2α dW2
b = b − α   d b b = b - \alpha~db b=bα db

两个缺点:一是需要遍历所有的样本(i = 1 … m),第二是需要遍历所有的特征( d W 1 , d W 2 dW_1,dW_2 dW1,dW2),计算量太大。
解决办法:用向量化代替for循环。

7 向量化

向量化代替第二个for循环:
在这里插入图片描述
向量化替代两个for循环,这里体现了将X表示成列向量形式矩阵的好处:
在这里插入图片描述
上图右侧保留的for循环表示进行1000次的梯度下降,该for循环没有办法再通过向量化进行消除。

8 python广播

在这里插入图片描述
python中numpy的reshape操作很高效,可以在计算之前进行reshape保证对正确大小的矩阵进行处理。

在这里插入图片描述
不要用shape为(n,)的秩为1的数组;多使用assert确保变量的shape是正确的;reshape开销很小,可以用来改变变量的排列shape。

9 作业

numpy中,* 和 np.multiply 表示逐元素相乘;np.dot(a,b)表示矩阵乘积;np.outer(a,b)表示向量的外积。

math.exp(x)表示对标量x进行指数运算,其无法对list进行运算;但是,np.exp([1,2,3])的输出为[ e 1 , e 2 , e 3 e^1,e^2,e^3 e1,e2,e3]。

计算范数,||x|| = np.linalg.norm(x,ord=2,axis=0,keepdims=True);

训练样本排列时,将每一个样本组成一个列向量。

对于形状为(a,b,c,d)的数组,可以使用
x_flatten = x.reshape((a,-1)).T 将其变换成 (bcd,a)的形状。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值