sp1.1-1.2 Neural Networks and Deep Learning
Relu这图像也叫线性流动函数 不再用sigmoid函数当激活函数
相当于max(0,x)函数 比较0和当前值哪个大
可以把隐藏层看作 前面整合
结构化数据基于数据库 特征都有明确的定义 非结构化数据比如图片 音频 像素
关于数据规模 不同复杂程度下以及传统机器学习的表现 红线是传统算法
小规模数据量关键是还是看怎么选特征值了 各种都差不多
大规模数据量还是看网络了
从sigmoid到relu修正线性单元 前者梯度容易为0 变为后者梯度下降很快
二元分类:
变为向量表示图片
每个样本竖着排列计算比较简单
利用逻辑回归进行二元分类 希望得到概率输出 0-1之间 加个sigmoid
这门课我们不用右上角的表示法 我们吧B 和W 分开
目标就是优化参数W和b
代价函数不用平方差避免了非凸函数 最后不好优化 凸函数才有最优啊 !
这个逻辑回归损失函数
意义就是当y=1时候 极端情况 接近1 那么等于-logy^ 要大 那么Y^要大 Y^=sigmoid(wx+b)要大 就是概率大
当Y=0时候 =-log(1-y^) 这里y^要小才行 正好标签和sigmoid算出来相匹配啊
总的代价函数 是所有损失函数的平均数 这里损失函数反应的是要优化的参数本身
这里就是算出所有样本的 损失了 才不断求导
然后再来一遍
不断求导 一点点移动到代价函数最低点
只要每次减去导数就行了 不管在左边还是在右边 都正好是往最低点走的
选这个代价函数简单解释:
看成概率: 加个log让他严格的单调函数 最后算出来是负的 所以最后log前再加个负号
log里面原本乘的 出来变加的 还是极大似然估计
这列他把log看成ln好算
链式求导 先对梯度函数求 dl/da= ylogy‘+(1-y)log1-y’那个
这里是按照ln的 出来就是dl/da= - y/a +(1-y)/1-a
然后对Z求导 dl /dz=dl/da *da/dz=- y/a +(1-y)/1-a * da/dz=- y/a +(1-y)/1-a* a(1-a)= a-y
dl/dw=dl/da*da/dz *dz/dw= x1 * (a-y)
当有m个样本时更新:
全局的代价函数求出来了吧,同样求导算W 和 b
完整过程
m个样本 循环 进去 累加算损失函数 顺便求导一次 最后除个总数 求个平均
这里假设两个特征值
这里整个算一遍 才是一个平均的导数啊 然后我们才W 减去这个导数
需要俩for 外面这一个 里面要是特征多了 也得循环吧
用向量化的形式表示 避免for循环
最终右边形式:
两个for循环效率低 还是用向量化算简单Vectorization 尽量避免for循环
可以算一下 时间差几百倍
学习速率也并不是越小越好
numpy中的广播Broadcasting
比如想算每个食物碳水化合物热量占比 即 carb/一列相加 苹果 56/(56+1.2+1.8)
下面的reshape可以不写 因为本来就是1*4的 3*4的除以1*4的矩阵 在numpy中可以算
numpy会自动扩展 这种机制就叫广播
tips: 不要用random.rand(5)写数组 因为形状会是(5,) 而是写成random.rand(5,1)
而且左边形式写自己乘完自己变数了 而不是矩阵
不确定可以用断言语句判断一下
在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert 就显得非常有用。assert的语法格式:assert expression它的等价语句为:if not expression: raise AssertionError

浙公网安备 33010602011771号