机器学习基础之交叉熵和MSE

机器学习基础之交叉熵与均方误差 我们都知道,对于分类任务,可以选用交叉熵做为模型的损失函数;对于回归任务,可以选用MSE来作为模型的损失函数。那么分类任务能否选用MSE来做为损失函数;回归任务能否选用交叉熵来作为损失函数呢? 本文只能尽可能尝试回答这个问题,帮助大家有个大概的认识,目前尚无法对其做严格的数学证明。如果大家看到对这个问题有很好的数学证明,欢迎讨论 符号定义: $N$: 类别数量 $y_i$: 样本onehot编码后label $p_i$: 模型预测第i个类别的输出 那么可以用交叉熵和MSE来衡量真值和模型预测结果的偏差。公式如下: 交叉熵:$loss_{cross_entropy}=-\sum_i^N y_ilog(p_i)$ MSE: $\frac{1}{N}\sum_i^N (y_i-p_i)^2$ CE是多项式分布的最大似然; 一、为什么分类任务用交叉熵,不能用MSE 1.1 直观感受 假设真实标签为(1,0,0),预测结果一是(0.8,0.1,0.1), 二是(0.8,0.15,0.05)。那么这两个预测哪个更好一点呢? 两个预测结果的交叉熵都是$-log0.8=0.223$, 预测一的MSE=0.02, 预测二MSE=0.025。 即MSE任务预测一的结果要好于预测二。MSE潜在的会让预测结果除真实标签以后的标签趋于平均分布。但是实际上我们不能主观的认为预测结果一好于二。 1.2 凹凸性角度 1.2.1 使用sigmod激活、或者softmax,MSE是非凸的 我们知道,如果一个优化问题是凸优化,那么我们是可以找到全局最优解的。但是如果问题是非凸的,那么很有可能找的解是sub-optimal的。 我们用desmos(一个非常好的画图工具)画一个图来说明,对于分类问题,如果用MSE来作为损失函数,它的函数图像是非凸的。 这个例子使用了7个样本,每个样本只具有单个特征。我们可以看到函数图像是非凸的。 在参考文献3中,作者也给出了简单的数学证明,过程如下: 但是以上证明只是证明了最简单的情况(逻辑回归),且只有一个参数$\theta$的情况,如果要证明多元函数是凸的,需要证明黑塞矩阵的正定的,这个很难证明 1.2.2 交叉熵是凸的 还以逻辑回归为例。 $z = wx+b\ a=\sigma(z)\ P(Y=1;w)=a, P(Y=0;w)=1-a$ $\sigma=\frac{1}{1+e^(-x)}$是激活函数 交叉熵为$J(w)=-[y_ilog(a)+(1-y_i)log(1-a)]$ $\frac{\partial J(w)}{\partial w}=-x(y_i-a)$ $\frac{\partial^2 J(w)}{\partial w^2}=-x[-a*(1-a)x]=x^2a*(1-a)$, 其中$a \in (0,1)$, 所以交叉熵的二阶导是大于等于0的。所以交叉熵是凸的。 注意上述证明是特例证明,非严格证明 1.3 参数估计角度 交叉熵多项式分布的极大似然估计 对于样本${(x_1,y_1), (x_2, y_2), …,(x_N, y_N)}$,使用逻辑回归来分类,那么这批样本的极大似然估计可以用如下式子表达,其中a(x)是sigmod激活 $L(w)=\prod_{i=1}^N(a_w(x_i))^{y_i}(1-a_w(x_i))^{1-y_i}$$ 对数似然如下: $ln(L(w))=\sum_{i=1}^N[y_iln(a(x_i))+(1-y_i)ln(1-a(x_i))]$ 上述式子是不是很眼熟,其实就是交叉熵。 其实,对于分类任务不能用MSE的原因是分类需要用sigmod或者softmax来作为激活函数,导致了MSE变成了非凸的函数...

1 分钟 · Pan

数据一致性

事务 ACID 在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性 原子性(Atomicity): 一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。 一致性(Consistency): 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等 事务隔离(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。 持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 参考文献: ACID在维基百科中的解释

1 分钟 · pan

网络协议总结

Abstract 本文借助wireshark抓包详细的讲解常用的网络协议。涉及的主要协议包括但不限于http协议、tcp协议、ip协议。为了表述的准确性,严重的参考了参考了谢希仁的《计算机网络》这本教程。 一、http请求抓包 通过如下命令请求一次百度的首页。 curl -v -i www.baidu.com 通过wireshark抓包如下: 其中 红色框:tcp三次握手 蓝色框:http请求与应答 绿色框:tcp四次挥手 本文会以上文的数据包来展开分析 在正式介绍之前,我们现在一张图,请求是如何一步一步封装的。以http请求为例 在数据链路层中有一个MTU的东西,表示上层payload最大的大小(单位byte) 有了这个东西就意味着如果上层的报文太大,必须要分割。在ip协议里叫分片;在tcp协议里叫分段,同时会涉及到tcp建立连接时(三次握手中的前两次握手),客户端和服务端会协商tcp header中MSS(最大数据报文段长度)字段。具体的我们后面会说道。 二、IP协议(RFC 791) IP数据报的格式如下图二 Ip数据报分为首部和数据部分两个部分。其中IP首部又分为固定首部+可变部分,固定部分长度固定为20个字节。 wireshark抓包如下: 2.1 IP header 固定部分 版本(4位):IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。 首部长度(4位):IP报头的长度,注意单位为4个字节。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。 区分服务(8位): 用来获得更好的服务,现在基本不用,可以忽略 总长度(16位):IP报文的总长度。报头的长度和数据部分的长度之和。所以一个IP报文的的最大长度为65535个字节。受MTU限制,最大只能为1500字节 标识(16位):唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。 标志(3位):共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。 片位移(13位):单位为8字节,指当前分片在原数据报(分片前的数据报)中相对于用户数据字段的偏移量,即在原数据报中的相对位置。(需要再乘以8) 生存时间(8位):TTL(Time to Live)。该字段表明当前报文还能生存多久,现在指跳数。每经过一个网关,TTL的值自动减1,当生存时间为0时,报文将被认为目的主机不可到达而丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。 协议(8位):指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2. 首部校验和(16位):用于检验IP报文头部(不包含数据部分)在传播的过程中是否出错,检查IP报头的完整性。 源IP地址(32位):源ip地址 目的IP地址(32位):目标ip地址 2.2 IP header 不固定部分 就因为ip header存在不固定部分,所以在固定部分才需要字段首部长度。ip header中不固定部分主要是用来增加ip数据报的功能的(1-40字节)。但是该部分很少使用,所以IPv6中没有该部分。所以可以忽略这部分的内容。 2.3 关于IP数据报分片 前面有提到过,在数据链路层有MTU限制即IP数据报的最大报文长度为1500字节,那么当ip数据长度超过1500时候,就需要分片。举例如下: 假设一个数据报总长度为3820字节,其中数据部分为3800字节(使用固定首都20字节,无可变部分)。显然3820超过MTU,需要分片。假设分片长度不超1420字节,出去20字节首都,那每个分片数据部分最长为1400。所以需要将数据部分分为三个数据报片(1400、1400、1000)。那么分片后,如何重新组装回一个完整的IP数据报呢?就需要上面提到的标识和片位移两个字段。分成3个数据报片的标识字段是一样的。再加上片位移字段就能计算出该分片在原数据报中的位置。上面三个分片的片位移分别为(0/8=0; 1400/8=175; 2800/8=350)。注意片位移单位为8字节 三、TCP协议(RFC 793) TCP协议是比较复杂的,要是搞明白TCP协议,就需要回答三个问题。(1)TCP如何保证可靠性传输;(2)TCP如何做流量控制;(3)TCP如何做拥塞控制。我们先从简单的TCP报文段格式开始介绍。 TCP报文段的格式如下图三 3....

1 分钟 · pan