% Homework Template \documentclass[a4paper]{article} \usepackage{ctex} \usepackage{amsmath, amssymb, amsthm} \usepackage{moreenum} \usepackage{mathtools} \usepackage{url} \usepackage{bm} \usepackage{enumitem} \usepackage{graphicx} \usepackage{subcaption} \usepackage{booktabs} % toprule \usepackage[mathcal]{eucal} \usepackage[thehwcnt = 1]{iidef} \usepackage{listings} \usepackage[x11names]{xcolor} \usepackage{float} \usepackage[colorlinks, linkcolor=black, anchorcolor=green, citecolor=blue]{hyperref} \DeclareMathOperator{\arctanh}{arctanh} % \DeclareMathOperator{\diag}{diag} \setenumerate[1]{label=(\arabic{*})} \setenumerate[2]{label=\arabic{*})} \definecolor{codekeyword}{RGB}{171, 0, 216} \definecolor{codetypename}{RGB}{29, 37, 251} \definecolor{codevariable}{RGB}{10, 23, 126} \definecolor{codestring}{RGB}{157, 0, 25} \definecolor{codecomment}{RGB}{31, 129, 19} \newfontfamily\cascadia[Ligatures=ResetAll]{Cascadia Code} % \newfontfamily\codefont[Ligatures=ResetAll]{Cascadia Code} \newfontfamily\codefont[Ligatures=ResetAll]{Fira Code}[Contextuals={Alternate}] % To enable ligature in listing, go check lstfiracode's github page and copy firacodestyle's settings. \lstset{ basicstyle = \small\codefont, % --- tabsize = 4, showstringspaces = false, numbers = left, numberstyle = \cascadia, % --- breaklines = true, captionpos = t, % --- frame = l, flexiblecolumns, columns = fixed, } \thecourseinstitute{清华大学电子工程系} \thecoursename{\textbf{媒体与认知} \space 课堂2} \theterm{2023-2024学年春季学期} \hwname{作业} \begin{document} \courseheader % 请在YOUR NAME处填写自己的姓名 \name{高艺轩} \vspace{3mm} \centerline{\textbf{\Large{理论部分}}} \section{单选题(15分)} % 请在?处填写答案 \subsection{\underline{B}} \subsection{\underline{A}} \subsection{\underline{B}} \subsection{\underline{A}} \subsection{\underline{B}} \section{计算题(15 分)} \subsection{设隐含层为$\mathbf{z}=\mathbf{W}^T\mathbf{x}+\mathbf{b}$,其中$\mathbf{x}\in R^{(m \times 1)}$,$\mathbf{z}\in R^{(n\times 1)}$,$\mathbf{W}\in R^{(m\times n)}$,$\mathbf{b} \in R^{(n\times 1)}$均为已知,其激活函数如下: $$\mathbf{y}=\delta(\mathbf{z})=tanh(\mathbf{z})$$ tanh表示双曲正切函数。若训练过程中的目标函数为L,且已知L对$\mathbf{y}$的导数 $\frac{\partial L}{\partial \mathbf{y}}=[\frac{\partial L}{\partial y_1},\frac{\partial L}{\partial y_2},...,\frac{\partial L}{\partial y_n}]^T$和$\mathbf{y}=[y_1,y_2,...,y_n]^T$的值。 } \subsubsection{请使用$\mathbf{y}$表示出$\frac{\partial \mathbf{y}^T}{\partial \mathbf{z}}$, 这里的$\mathbf{y}^T$ 为行向量。 } \begin{proof}[解] 首先,对$i \neq j$,$\dfrac{\partial y_i}{\partial z_j} = 0$。 同时$y_i = \tanh(z_i) = \tanh(\arctanh(y_i))$,因此 \[\frac{\partial y_i}{\partial z_i} = 1 - \tanh^2(z_i) = 1 - y_i^2\] 因此 \[\dfrac{\partial \boldsymbol{y}^\mathrm{T}}{\partial \boldsymbol{z}} = \diag\{1 - y_1^2, 1 - y_2^2, \dots, 1 - y_n^2\} \qedhere\] \end{proof} \subsubsection{请使用$\mathbf{y}$和$\frac{\partial L}{\partial \mathbf{y}}$表示$\frac{\partial L}{\partial \mathbf{x}}$,$\frac{\partial L}{\partial \mathbf{W}}$,$\frac{\partial L}{\partial \mathbf{b}}$。 } 提示:$\frac{\partial L}{\partial \mathbf{x}}$,$\frac{\partial L}{\partial \mathbf{W}}$,$\frac{\partial L}{\partial \mathbf{b}}$与x,W,b具有相同维度。 \begin{proof}[解] 由链式法则 \[\frac{\partial L}{\partial \boldsymbol{x}} = \frac{\partial \boldsymbol{z}^\mathrm{T}}{\partial \boldsymbol{x}} \frac{\partial \boldsymbol{y}^\mathrm{T}}{\partial \boldsymbol{z}} \frac{\partial L}{\partial \boldsymbol{y}} = W \diag\{1 - y_1^2, 1 - y_2^2, \dots, 1 - y_n^2\} \frac{\partial L}{\partial \boldsymbol{y}}\] 对于$\dfrac{\partial L}{\partial W}$, \[\frac{\partial \boldsymbol{z}^T}{\partial W} = \begin{bmatrix} \boldsymbol{x} & \boldsymbol{x} & \cdots & \boldsymbol{x} \end{bmatrix}_{m \times n}\] \begin{align*} \frac{\partial L}{\partial W} & = \frac{\partial \boldsymbol{z}^\mathrm{T}}{\partial W} \frac{\partial \boldsymbol{y}^\mathrm{T}}{\partial \boldsymbol{z}} \frac{\partial L}{\partial \boldsymbol{y}}\\ & = \begin{bmatrix} \boldsymbol{x} & \boldsymbol{x} & \cdots & \boldsymbol{x} \end{bmatrix}_{m \times n} \diag\{1 - y_1^2, 1 - y_2^2, \dots, 1 - y_n^2\} \frac{\partial L}{\partial \boldsymbol{y}} \end{align*} 对于$\dfrac{\partial L}{\partial \boldsymbol{b}}$,由链式法则 \[\frac{\partial L}{\partial \boldsymbol{b}} = \frac{\partial \boldsymbol{z}^\mathrm{T}}{\partial \boldsymbol{b}} \frac{\partial \boldsymbol{y}^\mathrm{T}}{\partial \boldsymbol{z}} \frac{\partial L}{\partial \boldsymbol{y}} = I_n \frac{\partial \boldsymbol{y}^\mathrm{T}}{\partial \boldsymbol{z}} \frac{\partial L}{\partial \boldsymbol{y}} = \diag\{1 - y_1^2, 1 - y_2^2, \dots, 1 - y_n^2\} \frac{\partial L}{\partial \boldsymbol{y}} \qedhere\] \end{proof} \vspace{6mm} \centerline{\textbf{\Large{编程部分}}} \vspace{3mm} % 请根据是否选择自选课题的情况选择“编程作业报告”或“自选课题开题报告”中的一项完成 \section{编程作业报告} % 请在此处完成编程作业报告 完成后的代码也可以在 \href{https://git.unlockableworld.com/unlockable/MediaNCognition}{\url{https://git.unlockableworld.com/unlockable/MediaNCognition}}中找到。 \begin{enumerate} \item 使用默认配置进行训练和测试。 \begin{enumerate} \item 训练模型。 输入: \lstinputlisting{codes/1.1.in.txt} 输出: \lstinputlisting{codes/1.1.out.txt} \begin{figure}[H] \centering \includegraphics[width=0.9\linewidth]{img/1default_train.png} \end{figure} \item 测试模型。 输入: \lstinputlisting{codes/1.2.in.txt} 输出: \lstinputlisting{codes/1.2.out.txt} \end{enumerate} \item 调整参数、使用Adam优化器训练并测试。 \begin{enumerate} \item 训练模型。 输入: \lstinputlisting{codes/2.1.in.txt} 输出: \lstinputlisting{codes/2.1.out.txt} \begin{figure}[H] \centering \includegraphics[width=0.9\linewidth]{img/2adam_optim.png} \end{figure} \item 测试性能。 输入: \lstinputlisting{codes/2.2.in.txt} 输出: \lstinputlisting{codes/2.2.out.txt} \end{enumerate} \item 使用效果最佳的模型测试。 经过简单的尝试,发现使用 \lstinputlisting{codes/self_train.in.txt} 可以使测试集准确率达到88.8\%,有略微的提升。训练的loss曲线: \begin{figure}[H] \centering \includegraphics[width=.9\linewidth]{img/3found_best.png} \end{figure} 使用它进行预测: \begin{figure}[H] \centering \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict01.png} \subcaption{预测:A} \end{subfigure} \hfill \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict02.png} \subcaption{预测:B} \end{subfigure} \hfill \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict03.png} \subcaption{预测:M} \end{subfigure} \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict04.png} \subcaption{预测:R} \end{subfigure} \hfill \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict05.png} \subcaption{预测:M} \end{subfigure} \hfill \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict06.png} \subcaption{预测:O} \end{subfigure} \hfill \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict07.png} \subcaption{预测:B} \end{subfigure} \hfill \begin{subfigure}[b]{.3\linewidth} \includegraphics[width=\linewidth]{img/predict/predict08.png} \subcaption{预测:W} \end{subfigure} \hfill \end{figure} \item 遇到的问题及解决方法 \begin{enumerate} \item 代码中对灰度图像的矩阵进行标准化时,\lstinline{numpy}显示不能对\lstinline{NumpyGenericArray}进行对\lstinline{float}的\lstinline{/}操作。改用\lstinline{np.div()}解决了这个问题。 \item 在利用训练好的模型进行预测时,发现自己找到的大部分模型都预测错误;最后与训练集的图片进行了对比,发现主要问题是裁切字母时留下了过大的边距,导致模型不能正确理解输入。重新裁剪边框后,得到正确的结果。 \end{enumerate} \item 建议:希望下次发布作业代码可以利用清华的git。 \end{enumerate} % \section{自选课题开题报告} % 请在此处介绍自选课题 \end{document} %%% Local Variables: %%% mode: late\rvx %%% TeX-master: t %%% End: