<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Deeplearning on pearl blog</title>
    <link>https://pearlblog.pages.dev/tags/deeplearning/</link>
    <description>Recent content in Deeplearning on pearl blog</description>
    <generator>Hugo -- 0.147.7</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 14 Feb 2026 19:24:57 +0800</lastBuildDate>
    <atom:link href="https://pearlblog.pages.dev/tags/deeplearning/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Softmax回归</title>
      <link>https://pearlblog.pages.dev/posts/softmax%E5%9B%9E%E5%BD%92/</link>
      <pubDate>Sat, 14 Feb 2026 19:24:57 +0800</pubDate>
      <guid>https://pearlblog.pages.dev/posts/softmax%E5%9B%9E%E5%BD%92/</guid>
      <description>&lt;p&gt;&lt;strong&gt;abstract: 李沐动手深度学习&amp;ndash;softmax回归的数学原理与从零实现&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;story&lt;/strong&gt;: 什么是适合新手的教程？&lt;br&gt;
&lt;strong&gt;Attention: 关于语法的讲解主要涉及torch库，其他库的用法可能略有出入&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;h1 id=&#34;一-回归-vs-分类&#34;&gt;一. 回归 vs 分类&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;本质上：输出连续与否&lt;/strong&gt;
譬如softmax回归，其输出是&lt;strong&gt;预测为某类别的概率&lt;/strong&gt;，是连续值，属于[0, 1]之间，故即使最后用于分类问题，其本质也是一个回归模型&lt;/p&gt;
&lt;h1 id=&#34;二-神经元与激活函数&#34;&gt;二. 神经元与激活函数&lt;/h1&gt;
&lt;p&gt;&lt;img alt=&#34;neural&#34; loading=&#34;lazy&#34; src=&#34;https://pearlblog.pages.dev/image/neural.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;21-神经元&#34;&gt;2.1 神经元&lt;/h2&gt;
&lt;p&gt;所谓神经元，指的是一个运算过程：&lt;code&gt;f(W*X + b)&lt;/code&gt; ，&lt;code&gt;W&lt;/code&gt;是该神经元前一层的权重，&lt;code&gt;X&lt;/code&gt;是该神经元前一层的输出，这两者通常是两个矩阵。b是偏置，决定W*X有多难被激活（对于阶跃函数或ReLu这种激活函数，自变量小于零时函数值为0，故可以通过调节偏置b的值，进而调节W*X被激活的阈值）。而f()就是激活函数。&lt;/p&gt;
&lt;h2 id=&#34;22-激活函数&#34;&gt;2.2 激活函数&lt;/h2&gt;
&lt;p&gt;神经网络中，激活函数必须是非线性的，否则网络的层数和深度都没有意义。而激活函数是非线性的，不代表网络一定是非线性的。非线性的网络需要满足两个条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;非线性的激活函数&lt;/li&gt;
&lt;li&gt;复合运算或者高次运算&lt;br&gt;
在网络中，&lt;strong&gt;复合运算&lt;/strong&gt;就是指&lt;strong&gt;多层网络&lt;/strong&gt;，即至少存在一层隐藏层神经元，两组W权重矩阵的网络&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;三-softmax&#34;&gt;三. softmax&lt;/h1&gt;
&lt;h2 id=&#34;31-两个作用&#34;&gt;3.1 两个作用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;非负化&lt;/li&gt;
&lt;li&gt;将数值映射到0-1区间（概率化）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;32-公式&#34;&gt;3.2 公式&lt;/h2&gt;
$$\frac{}$$&lt;h1 id=&#34;四代码一般结构&#34;&gt;四.代码一般结构&lt;/h1&gt;
&lt;h2 id=&#34;41-工具函数&#34;&gt;4.1 工具函数&lt;/h2&gt;
&lt;h3 id=&#34;411-定义net&#34;&gt;4.1.1 定义net&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;softmax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    softmax 的 Docstring
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    :param X: 二维矩阵，每行代表一个样本，每列代表一个类别，即每行代表一个样本的各类别的得分
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;X_exp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;example_sum&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X_exp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;keepdim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X_exp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;example_sum&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    net 的 Docstring
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    batch_size*(H*W) @ (H*W)*num_classes -&amp;gt; batch_size*num_classes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    :param X: 输入数据，形状为 (batch_size, 1, 28, 28)，需要先 reshape 成 (batch_size, 784) 才能与权重矩阵 W 相乘.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;softmax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;matmul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reshape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;W&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;W&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 这里reshape不会改变原始数据形状, 也不创建新副本， 数据还是那个数据，这里创建了一个新视图，改变了查看数据的方式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;-&lt;code&gt;sum(dim = 0)&lt;/code&gt;: dim等于几，shape中第几项就变为1。比如dim = 0，一个[2,3]的矩阵变为了[1,3]，也就是对每一行求和，成了一个列向量；同样地，dim = 1时对每一列求和，成了一个行向量&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
