深度学习与机器学习的区别?
深度学习属于机器学习
深度学习的本质就是线性回归
机器学习在特征提取方面是根据程序员的经验来提取的,非常考验程序员对某一行业的了解程度
深度学习在特征提取方面是通过大量数据训练得到的,不需要人工设计
神经网络的组织构成?
神经网络由输入层、隐层和输出层构成
深度学习效果特点?
深度学习对于大型数据集的效果更好,并且运算精度更高
逻辑回归的算法计算输出、损失函数
逻辑回归是一个二分类算法,根据给定的x能够输出一个该样本属于1的对应类别的概率
输出预测结果
\hat{y} = \sigma(w^T+b) = \sigma(w_1 x_1+ w_2x_2+...+w_nx_n +b) = \sigma(\theta^Tx +b)y^=σ(wT+b)=σ(w1x1+w2x2+...+wnxn+b)=σ(θTx+b)\hat{y} = \sigma(w^T+b) = \sigma(w_1 x_1+ w_2x_2+...+w_nx_n +b) = \sigma(\theta^Tx +b)y^=σ(wT+b)=σ(w1x1+w2x2+...+wnxn+b)=σ(θTx+b)
Sigmoid 函数: s = \sigma(w^Tx+b) = \sigma(z) = \frac{1}{1+e^{-z}}Sigmoid函数:s=σ(wTx+b)=σ(z)=11+e−zSigmoid 函数: s = \sigma(w^Tx+b) = \sigma(z) = \frac{1}{1+e^{-z}}Sigmoid函数:s=σ(wTx+b)=σ(z)=1+e−z1
损失函数
L(y,\hat{y}) = - y log\hat{y} - (1-y)log(1 - \hat{y})L(y,y^)=−ylogy^−(1−y)log(1−y^)L(y,\hat{y}) = - y log\hat{y} - (1-y)log(1 - \hat{y})L(y,y^)=−ylogy^−(1−y)log(1−y^)
如果y是1,损失为-ylog\hat{y}−ylogy^-ylog\hat{y}−ylogy^,想要函数的损失最小,那么\hat{y}y^\hat{y}y^必须等于1或者趋近于1
如果y是0,损失为-log(1-\hat{y})−log(1−y^)-log(1-\hat{y})−log(1−y^),想要函数的损失最小,那么\hat{y}y^\hat{y}y^必须等于0或者趋近于0
代价函数
损失函数是单个样本的表现,代价函数是整个数据集的表现
J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})J(w,b)=1m∑i=1mL(y^(i),y(i))J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})J(w,b)=m1∑i=1mL(y^(i),y(i))
知道导数的计算图
导数的链式求导法则
知道逻辑回归的梯度下降算法
w_k = w_{k-1} - \alpha*\frac{dJ(w_1, b)}{dw_1}wk=wk−1−α∗dJ(w1,b)dw1w_k = w_{k-1} - \alpha*\frac{dJ(w_1, b)}{dw_1}wk=wk−1−α∗dw1dJ(w1,b)
b_k = b_{k-1} - \alpha\frac{dJ(w, b)}{db}bk=bk−1−αdJ(w,b)dbb_k = b_{k-1} - \alpha\frac{dJ(w, b)}{db}bk=bk−1−αdbdJ(w,b)
知道样本的向量计算
向量计算就是采用矩阵运算的方法,否则每次计算都要写for循环,算法的时间复杂度太高
知道浅层神经网络的前向计算过程
对每层神经元都计算线性回归,然后在使用激活函数得到输出,再传到下一层神经元
知道选择激活函数的原因
tanh
双曲正切函数
y = \frac{e^x - e^{-x}}{e^x + e^{-x}}y=ex−e−xex+e−xy = \frac{e^x - e^{-x}}{e^x + e^{-x}}y=ex+e−xex−e−x
它的取值范围是(-1,1),比Sigmoid取值范围更大,效果也比Sigmoid更好,常用与自然语言处理
和Sigmoid有同样的缺点:当X过大或者过小,函数的梯度趋近于0,梯度算法过慢
Relu
线性修正单元
y = max(z,0)
当z大于0时,梯度始终为1,收敛速度远大于Sigmoid和tanh,虽然z小于0时,梯度为0,但是影响不大
Sigmoid
y = \frac{1}{1+e^{-x}}y=11+e−xy = \frac{1}{1+e^{-x}}y=1+e−x1
说明浅层神经网络的反向传播推导过程
反向传播就是根据前向传播得到的结果,求导更新参数
参数初始化
如果初始时将两个隐藏神经元的参数设置为同样的大小,那么两个隐藏神经元对输出单元的影响是相同的,也就没有了效果,但是如果设置为0,也是不可以的
所以根据经验所得,一般设置w和b为:
W = np.random.randn(2,2)* 0.01
b = np.zeros((2,1))