1.2 单层神经网络【猫猫识别,前向传播(逻辑回归)to预测结果,反向传播(梯度下降)to优化w、b向量,使成本J最小 == 识别准确】

    技术2022-07-11  117

    图片如何输入到神经网络

    1张图片:原本是 64 * 64 * 3的 rgb数据,拉成一个12288 * 1的列向量,代表一个图片,列向量每一个元素都是一个特征。

    m张图片:就是m个列向量,形成一个 12288 * m 矩阵,每一列都是一张图片。

    神经网络如何进行预测

    答:z = dot (w, x) + b              --- w应该是w的转置 : wT

    例子1:去外面玩吗?

    结果 = (天气权重 * 天气情况) + (身体状态权重 * 身体状态情况) + (心情权重 * 心情情况 ) + bias

    若z > 0,去;若z <  0 不去;

    z = ( w1 * x1 +  w2 * x2 + w3 * x3) + b

       = (2 * 0 + 2 * 1 + 7 * 1) + (-5)

       = 2

    例子2:图片是猫吗?

    每个特征,都配一个权重,

    如果结果z > 0, 是猫 ;如果结果z < 0, 不是猫。

    sigmoid起了什么作用?

    把z映射到0~1区间,结果0.8 == 80% 有猫

    向量化表示(前向传播得出预测结果)

    注释:向量默认都是列向量

    对于单个结果

    对于全部结果

     怎么看预测的准不准?

    训练集的表示,预测结果的表示

    前向传播

    单个样本 准确否?loss function

    全部样本 准确否?cost function

    对每个loss function累加,求平均值就行了

    J越小,说明预测的越准确!

    注:L 与 J 都在同一个数量级上,只是J 更平均,是所有L的平均数。

    如何根据数据学习,如何预测得更准?

    J越小,越精准!

    J是全部样本Loss的平均数,J是一个凸函数;

    因为训练集 输入的x、y是固定的,所以J是由w、b决定的!

    训练的目的,就是通过"梯度下降",一步步改变w、b,调整到合适的w 和 b,使得J最小!==下次预测更准确!

     

    r == 步长 , dw == 导数/偏导数/斜率

    通过链式求导,计算出偏导数dw、db

    前向传播(计算出z,进而激活出自己的预测a,与y比较得出差值L)

    反向传播(其实就是链式求导) 

    目的:计算出 dw1 dw2 db,更新w1 w2 b,使得J下降 == 预测更准了

    计算dz:

    对于单个图片样本:

    # 注释: 当初疑惑w不是横着的么,dw怎么是列向量,现在想来,wT才是横着的,dw、w都是列向量!

    对于多个图片样本:

    对于dw:想想"厨师做菜,油盐醋""油比:盐比:醋比"的例子,这个列向量代表什么? -- from方浩考研·线性代数

    更新迭代:

    向量化

    改变: 

       

    线性代数补充

    解释方浩的厨师做菜:

    https://www.bilibili.com/video/BV1JA411h7Jf,开头部分是讲解。

    方浩按照左边矩阵-列分块,右边矩阵-行分块。记得在强化班第五章末尾有其他解释。

    矩阵是唯一的,行列式|A| 可以其中的某行某列去移动、加减,矩阵的初等变换是"→",是方程组的同解,不是"="。

    基本:

    矩阵*特征向量:

    矩阵*矩阵:

    代码:

    https://gitee.com/bijingrui1997/deep_learning_notes/tree/master/1.2 单层神经网络(猫猫识别)

    Processed: 0.011, SQL: 9