深度学习笔记(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 imes m))的实矩阵来表示图像,想要求得是不是一只猫的概率(hat{y}=P(y=1|x)space 其中0lehat{y} le 1)

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

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

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

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

b对映一个拦截器

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

image-20210708103728789

3.关于logistic的损失函数

有上节课可知(hat{y}=sigmoid(w^Tx+b),wherespace 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)=-(yloghat{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)}loghat{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)=-(ylog 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

原文地址:https://www.cnblogs.com/37kiazz73/p/15064251.html