|
@@ -11,13 +11,13 @@ |
|
|
"cell_type": "markdown", |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"source": [ |
|
|
"softmax经常被添加在分类任务的神经网络中的输出层,神经网络的反向传播中关键的步骤就是求导,从这个过程也可以更深刻地理解反向传播的过程,还可以对梯度传播的问题有更多的思考。\n", |
|
|
|
|
|
|
|
|
"`Softmax`经常被添加在分类任务的神经网络中的输出层,神经网络的反向传播中关键的步骤就是求导,从这个过程也可以更深刻地理解反向传播的过程,还可以对梯度传播的问题有更多的思考。\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"## 1. softmax 函数\n", |
|
|
"## 1. softmax 函数\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"softmax(柔性最大值)函数,一般在神经网络中, softmax可以作为分类任务的输出层。其实可以认为softmax输出的是几个类别选择的概率,比如我有一个分类任务,要分为三个类,softmax函数可以根据它们相对的大小,输出三个类别选取的概率,并且概率和为1。\n", |
|
|
|
|
|
|
|
|
"`softmax`(柔性最大值)函数,一般在神经网络中, `softmax`可以作为分类任务的输出层。其实可以认为`softmax`输出的是几个类别选择的概率,比如有一个分类任务,要分为三个类,softmax函数可以根据它们相对的大小,输出三个类别选取的概率,并且概率和为1。\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"Softmax从字面上来说,可以分成`soft`和`max`两个部分。`max`故名思议就是最大值的意思。Softmax的核心在于`soft`,而`soft`有软的含义,与之相对的是`hard`硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的`hardmax`。下面使用`Numpy`模块实现hardmax。" |
|
|
|
|
|
|
|
|
"Softmax从字面上来说,可以分成`soft`和`max`两个部分。`max`故名思议就是最大值的意思。Softmax的核心在于`soft`,而`soft`有软的含义,与之相对的是`hard`硬。很多场景中需要找出数组所有元素中值最大的元素,实质上都是求的`hardmax`。下面使用`Numpy`模块实现hardmax。" |
|
|
] |
|
|
] |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
{ |
|
@@ -62,7 +62,7 @@ |
|
|
"\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"softmax直白来说就是将原来输出是$[3,1,-3]$通过softmax函数作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!\n" |
|
|
|
|
|
|
|
|
"softmax直白来说就是将原来输出是$[3,1,-3]$通过softmax函数作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,选取概率最大(也就是值对应最大的)结点,作为预测目标!\n" |
|
|
] |
|
|
] |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
{ |
|
@@ -108,7 +108,7 @@ |
|
|
"cell_type": "markdown", |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"source": [ |
|
|
"以一个神经元的二类分类训练为例,进行两次实验(神经网络常用的激活函数为`sigmoid`函数,该实验也采用该函数):输入一个相同的样本数据x=1.0(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):\n", |
|
|
|
|
|
|
|
|
"以一个神经元的二类分类训练为例,进行两次实验(神经网络常用的激活函数为`sigmoid`函数,该实验也采用该函数):输入一个相同的样本数据$x=1.0$(该样本对应的实际分类$y=0$);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"\n", |
|
|
"实验1:第一次输出值为0.82\n", |
|
|
"实验1:第一次输出值为0.82\n", |
|
@@ -267,7 +267,7 @@ |
|
|
"name": "python", |
|
|
"name": "python", |
|
|
"nbconvert_exporter": "python", |
|
|
"nbconvert_exporter": "python", |
|
|
"pygments_lexer": "ipython3", |
|
|
"pygments_lexer": "ipython3", |
|
|
"version": "3.7.9" |
|
|
|
|
|
|
|
|
"version": "3.5.4" |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
"nbformat": 4, |
|
|
"nbformat": 4, |
|
|