深度学习笔记(1-1)

第一周

1.什么是深度学习

深度学习指的是训练神经网络

神经网络是啥?

比如做一个房价预测,输入一个房子的面积x,通过一个神经元(neuron),输出一个房价y

大点的神经网络就是把这些神经元组合起来image-20210706090624686

修正线性单元,即ReLU(Rectified linear unit),修正是指取不小于0的值

image-20210706085914678

监督学习

输入一些x,得到一个y

image-20210706091722245

image-20210706091221885

结构化的数据

例如一张表,每个属性都有一个值,

非结构化的数据

例如一张图,一段音频

为什么现在深度学习现在流行起来了呢?

早期的数据很少,传统的模型进入平台期

现在我们能获得很多数据,硬件水平也上来了,算力很高

如何获得一个好的神经网络呢

规模越大的神经网络,和数据越多的神经网络效果约好

我们规定用小写字母m来表示训练集的规模

第二周

1.logistic回归

二分分类问题:根据x得出y是0或1

关于logistic的训练集和测试集

image-20210708101702975

2.关于logistic回归的概述

给出x是一个\((n\times m)\)的实矩阵来表示图像,想要求得是不是一只猫的概率\(\hat{y}=P(y=1|x)\space 其中0\le\hat{y} \le 1\)

已知w也是一个\((n\times m)\)的实矩阵,b是一个实数

所以我们根据线性回归得到\(\hat{y}=sigmoid(w^Tx+b)\)

\(sigmoid(z)=\dfrac{1}{z+e^{-z}}\)

所以在做回归的过程中的关键就是train出w和b

b对映一个拦截器

但是在有些课程中,有一些符号会将w和b合并起来,其中的\(\theta^0\)表示的是b

image-20210708103728789

3.关于logistic的损失函数

有上节课可知\(\hat{y}=sigmoid(w^Tx+b),where\space sigmoid(z)=\dfrac{1}{z+e^{-z}}\)

其中为了区分训练样本和测试样本,训练样本\((i)\)所对应的预测值是\(\hat{y}^{(i)}\)

损失函数可以定义为\(L(\hat{y},y)=\dfrac{(\hat{y}-y)^2}{2}\),但是这个函数是非凸的,我们可能得到的是一个局部最优,不利于梯度下降

所以这里的损失函数来评估训练结果,\(L(\hat{y},y)=-(y\log\hat{y}+(1-y)\log(1-\hat{y}))\)

成本函数衡量了w和b在训练集上的效果\(J(w,b)=\frac{1}{m}\sum^{m}_{i=1}L(\hat{y}^{(i)},y^{(i)})=-\frac{1}{m}\sum^{m}_{i=1}(y^{(i)}\log\hat{y}^{(i)}+(1-y^{(i)})\log(1-\hat{y}^{(i)}))\)

评估函数越小越好

image-20210708111312543

4.关于梯度下降法

使用梯度下降方法来训练出w和b,为了找到最小的\(j(w,b)\)值,我们取一点后朝着最快的下降反向往下走,反复执行此操作,直到找到最小值,因为logistic的损失函数是一个凸函数,所以我们可以找到最小值

\[w:=w-\alpha dw \]

其中的\(\alpha\)表示的是学习率,也就是步长,\(dw\)表示的是J函数关于w的导数,所以,所谓的梯度下降法就是使整体朝着下降速度最快的方向下降,同理,对于参数b,也是一样的、需要注意的是,\(dw和db\)表示的应该是关于J函数的偏导数

image-20210712145155937

5.关于导数

导数=函数在这点的斜率=函数的变化率

6.关于计算logistic的梯度下降方法

首先logistic的计算公式

\(z=w^Tx+b\)

\(\hat{y}=a=sigmoid(z)\)

\(a=sigmoid(z)=\dfrac{1}{z+e^{-z}}\)

\(L(a,y)=-(y\log a+(1-y)\log(1-a))\)

假设有两个特征值x1,x2,输入参数w1,w2和b

\(z=w_1x_1+w_2x_2+b\)

\(L=(a,y)\)

然后我们来求导可以得到

\(da=dl/da=-y/a+(1-y)/(1-a)\)

\(dz=dl/dz=dl/da * da/dz=a-y\)

然后我们可以求得\(dw\)\(db\)的值

\(dl/dw_1 = dw_1=x_1dz \\ dl/dw_2 = dw_2=x_2dz \\ dl/db = db=dz\)

根据梯度下降的公式进行一次计算

\(w_1:=w_1 - \alpha dw_1 \\ w_2:=w_2 - \alpha dw_2 \\b:=b - \alpha db\)

就能得到一次梯度下降的参数

image-20210722211129218

7.m个样本的梯度下降

关于logistic的成本函数在第3节中已有叙述:

\(J(w,b)=\frac{1}{m}\sum^{m}_{i=1}L(a^{(i)},y^{(i)})=-\frac{1}{m}\sum^{m}_{i=1}(y^{(i)}\log a^{(i)}+(1-y^{(i)})\log(1-a^{(i)}))\)

当只有单个样本\(w1^{(i)}\)\(w2^{(i)}\)\(b^{(i)}\),就像上节所示例的那样,

所以此时\(\alpha J/\alpha w_1=1/m * \sum_{i=1}^{m} \alpha L/\alpha w_1\)(省略了很多细节

可以发现,这就是把上节的\(dw_1\)加起来求平均值,所以我们可以用伪代码来实现

image-20210722214115783

8.向量化

我们用向量化后的数值来计算的时间对比于用for可以快很多

image-20210726141823933

可以看到,向量化之后的运行速度会大幅上升

因为numpy可以调用CUP和GPU来进行大量并行运算

总之我们能避免使用for就尽量避免

9.向量化来实现logistic回归(课后作业)

# 首先:下面是无向量化的实现

image-20210726144221704


10.python中的广播

image-20210726150310330

给一个矩阵求出carb和fat和protein中所占的百分比(使用向量化

import numpy as np
A = np.array([[56.0, 0.0, 4.4, 68.0], [1.2, 104.0, 52.0, 8.0],
              [1.8, 135.0, 99.0, 0.9]])
temp1 = A.sum(axis=0)
p = 100 * A / (temp1.reshape(1, 4))
print(p)

image-20210726150506801

image-20210726151739307

posted @ 2021-07-27 09:29  AshK  阅读(109)  评论(0编辑  收藏  举报