ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>Èý¹úɱÓÎÏ·¹æÔò:BlogJava - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/misc专注于Java技æœ?/description>zh-cnWed, 16 Oct 2019 02:32:32 GMTWed, 16 Oct 2019 02:32:32 GMT60IM开发基¼‹€çŸ¥è¯†è¡¥è¯¾(å…?åQšæ•°æ®åº“用NoSQL˜q˜æ˜¯SQLåQŸè¯»˜q™ç¯‡ž®±å¤Ÿäº†ï¼ - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/09/26/434701.htmlJack JiangJack JiangThu, 26 Sep 2019 06:16:00 GMT//www.lmlez.icu/jb2011/archive/2019/09/26/434701.html//www.lmlez.icu/jb2011/comments/434701.html//www.lmlez.icu/jb2011/archive/2019/09/26/434701.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434701.html//www.lmlez.icu/jb2011/services/trackbacks/434701.html阅读全文

]]>
¾ŸŽå›¢æŠ€æœ¯åˆ†äº«ï¼šæ·±åº¦è§£å¯†¾ŸŽå›¢çš„分布式ID生成½Ž—法 - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/09/23/434692.htmlJack JiangJack JiangMon, 23 Sep 2019 08:25:00 GMT//www.lmlez.icu/jb2011/archive/2019/09/23/434692.html//www.lmlez.icu/jb2011/comments/434692.html//www.lmlez.icu/jb2011/archive/2019/09/23/434692.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434692.html//www.lmlez.icu/jb2011/services/trackbacks/434692.html阅读全文

]]>
融云技术分享:解密融云IM产品的聊天消息ID生成½{–ç•¥ - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/09/19/434674.htmlJack JiangJack JiangThu, 19 Sep 2019 09:40:00 GMT//www.lmlez.icu/jb2011/archive/2019/09/19/434674.html//www.lmlez.icu/jb2011/comments/434674.html//www.lmlez.icu/jb2011/archive/2019/09/19/434674.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434674.html//www.lmlez.icu/jb2011/services/trackbacks/434674.html阅读全文

]]>
融云技术分享:融云安卓端IM产品的网¾lœé“¾è·¯ä¿‹zÀLŠ€æœ¯å®žè·?/title><link>//www.lmlez.icu/jb2011/archive/2019/09/17/434662.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Tue, 17 Sep 2019 03:15:00 GMT</pubDate><guid>//www.lmlez.icu/jb2011/archive/2019/09/17/434662.html</guid><wfw:comment>//www.lmlez.icu/jb2011/comments/434662.html</wfw:comment><comments>//www.lmlez.icu/jb2011/archive/2019/09/17/434662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>//www.lmlez.icu/jb2011/comments/commentRss/434662.html</wfw:commentRss><trackback:ping>//www.lmlez.icu/jb2011/services/trackbacks/434662.html</trackback:ping><description><![CDATA[     摘要: 本文来自融云技术团队原创分享,原文发布äº?#8220; 融云全球互联¾|‘通信äº?#8221;公众åøP¼ŒåŽŸé¢˜ã€ŠIM åÏx—¶é€šè®¯ä¹‹é“¾è·¯ä¿‹z…R€‹ï¼ŒåÏx—¶é€šè®¯¾|‘收录时有部分改动ã€?、引­a€ä¼—所周知åQŒIM åÏx—¶é€šè®¯æ˜¯ä¸€™å¹å¯¹åÏx—¶æ€§è¦æ±‚非帔R«˜çš„技术,而保障消息即时到辄¡š„首要条äšgž®±æ˜¯é“¾èµ\存活。那么在复杂的网¾lœçŽ¯å¢ƒå’Œå›½å†…安卓手机被深度定制化的条件下åQŒå¦‚何保障链路存‹zÕd‘¢åQŸæœ¬æ–‡è¯¦è§£äº†èžäº‘安卓端IM产品在基äº?TCP 协议实现链èµ\ä¿?..  <a href='//www.lmlez.icu/jb2011/archive/2019/09/17/434662.html'>阅读全文</a><img src ="//www.lmlez.icu/jb2011/aggbug/434662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.lmlez.icu/jb2011/" target="_blank">Jack Jiang</a> 2019-09-17 11:15 <a href="//www.lmlez.icu/jb2011/archive/2019/09/17/434662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《统计学习方法》的è¯ÖM¹¦½W”è®° - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/zhuyuanxiang/archive/2019/09/17/434659.htmlzYx.TomzYx.TomTue, 17 Sep 2019 01:39:00 GMT//www.lmlez.icu/zhuyuanxiang/archive/2019/09/17/434659.html//www.lmlez.icu/zhuyuanxiang/comments/434659.html//www.lmlez.icu/zhuyuanxiang/archive/2019/09/17/434659.html#Feedback0//www.lmlez.icu/zhuyuanxiang/comments/commentRss/434659.html//www.lmlez.icu/zhuyuanxiang/services/trackbacks/434659.html

Èý¹úɱÓÎÏ·¹æÔò:全书总评

  • 书本印刷质量åQ? 星。印åˆäh¸…楚,排版合适,错误很少ã€?
  • 著作¾~–写质量åQ? 星。自学机器学习的必备ã€?
    • 优点
      • 全书一直围¾l•ç€¾lŸè®¡å­¦ä¹ ä¸­çš„有监督学习描˜qŽÍ¼Œå†…容不深åQŒåŸºæœ¬ç®—法都有所介绍åQ?
      • 内容的组¾l‡æ˜¯ä»ŽæŠ½è±¡åˆ°å…·ä½“的思维模式åQŒæ¯”国外的教材易于理解;
      • 是自学统计学习和机器学习的推荐用书ã€?
    • ¾~ºç‚¹
      • 基础部分讲解¾~ºå°‘理论åQŒå­¦å®ŒåŽæ— æ³•ç†è§£åQŒä¸åˆ©ç”¨å­¦ä»¥è‡´ç”¨ã€‚例如:感知器的损失函数åQŒåº”该是¾lŸè®¡å­¦ä¹ çš„核心思想åQŒé‚£ä¹ˆæŸå¤±å‡½æ•°åœ¨æ•´ä¸ª½Ž—法中的位置åQŒä»¥åŠå¦‚何选择损失函数都需要说明清楚,才能够指导后面各¿Uå…¶ä»–机器学习方法的理解ã€?
      • 使用的方法没有导入的原因和出处,学习˜q‡ç¨‹ä¸­ä¼šäº§ç”Ÿæ¯”较大的跌™·ƒæ„Ÿï¼Œå»¶ç®‹æ€§ä¸­‘Ÿë€‚例如:随机梯度下降法,只是说明用于¼œžç»¾|‘络的优化需要用随机梯度下降åQŒè€Œå®žé™…上随机梯度下降是äؓ了满­‘›_œ¨¾U¿å­¦ä¹ çš„需要,如果是批量学习可以直接ä‹É用梯度学习算法实现ã€?
    • æ€È»“åQšç‘•ä¸æŽ©ç‘œï¼Œå»ø™®®¾l“合 “西瓜书â€?[周志华,2018] 一èµïLœ‹ã€?
  • ½W”记目的åQšè®°å½•é‡ç‚¹ï¼Œæ–¹ä¾¿å›žå¿†ã€?

C01. ¾lŸè®¡å­¦ä¹ æ–ÒŽ³•æ¦‚论

  • ˜q™ä¸€ç« éƒ½æ˜¯æ¦‚念和¾l“论åQŒå¦‚果读者能够透过概念ž®±æ˜Žç™½é‡Œé¢å®žé™…操作的内容åQŒé‚£ž®±å¯ä»¥å¿«é€Ÿæµè§ˆæ­¤ä¹¦ï¼Œå¦åˆ™å‡†å¤‡¾U¸å’Œ½W”认真精è¯ÀL–¹èƒ½æ”¶èŽ—÷€?
  • 后面的各章内容相对独立,读者既可以˜qžç®‹å­¦ä¹ åQŒä¹Ÿå¯ä»¥ä»…选择自己感兴­‘£çš„内容ã€?

¾lŸè®¡å­¦ä¹ 

¾lŸè®¡å­¦ä¹ å¯ÆD¨€

  • ¾lŸè®¡å­¦ä¹  (statistical learning): 计算机基于数据构建概率统计模型,òq¶è¿ç”¨æ¨¡åž‹å¯¹æ•°æ®˜q›è¡Œé¢„测与分析的一门学¿U‘ã€?
    • 因此¾lŸè®¡å­¦ä¹ ä¹Ÿç§°ä¸ºç»Ÿè®¡æœºå™¨å­¦ä¹?(statistical machine learning).
  • ¾lŸè®¡å­¦ä¹ çš„主要特ç‚?
    • 理论基础
      • 数学基础åQšå¾®¿U¯åˆ†ã€çº¿æ€§ä»£æ•°ã€æ¦‚率论、统计学、计½Ž—理论、最优化理论
      • 其他基础åQšä¿¡æ¯è®ºã€è®¡½Ž—机¿U‘学及应用相关的¿U‘å­¦½{‰å¤šä¸ªé¢†åŸŸçš„交叉学科
      • 在发展中形成自己独立的理è®ÞZ½“¾pÖM¸Žæ–ÒŽ³•è®ºã€?
    • 应用基础åQšè®¡½Ž—机及网¾lœï¼›
    • 研究对象åQšæ•°æ®ï¼Œæ˜¯æ•°æ®é©±åŠ¨çš„学科åQ?
    • 研究目的åQšå¯¹æ•°æ®˜q›è¡Œåˆ†ç±»å’Œé¢„‹¹‹ï¼›
    • 研究手段åQšé€šè¿‡¾lŸè®¡å­¦ä¹ æ–ÒŽ³•æž„徏模型åQŒåƈ应用模型˜q›è¡Œåˆ†ç±»å’Œé¢„‹¹‹ï¼›

  • ¾lŸè®¡å­¦ä¹ çš„对象是数据 (data)
    • 从数据出发,提取数据çš?“特征â€?åQŒæŠ½è±¡å‡ºæ•°æ®çš?“模型â€?åQŒå‘现数据中çš?“知识â€?åQŒåˆå›žåˆ°å¯ÒŽ•°æ®çš„ “分¾c Z€?ä¸?“预‹¹‹â€?中ã€?
    • 数据的基本假设:同类数据å…ähœ‰ä¸€å®šçš„¾lŸè®¡è§„律性,所以可以用概率¾lŸè®¡æ–ÒŽ³•åŠ ä»¥å¤„理ã€?
    • 数据分类æœ?“连¾l­åž‹â€?å’?“离散型â€?两种åQŒæœ¬ä¹¦ä¸»è¦å…³æ³¨çš„æ˜?“离散型â€?数据ã€?
  • 模型åQšå­¦ä¹ ä»€ä¹ˆæ ·çš„模åž?
  • ½{–ç•¥åQšå¦‚何学习模åž?â†?使模型能够对数据˜q›è¡Œå‡†ç¡®åœ°åˆ†¾cÕd’Œé¢„测
  • ½Ž—法åQšå¦‚何提高模型的学习效率
  • ¾lŸè®¡å­¦ä¹ çš„方法分¾c?/strong>
    • 有监督学ä¹?(supervised learning) åQˆå…¨ä¹¦é‡ç‚¹ï¼‰
      • 从给定的、有限的、用于学习的训练数据 (training data) 集合出发åQ?
        • 假设数据是独立同分布产生的;
      • 假设要学习的模型属于某个函数的集合,¿UîCؓ假设½Iºé—´ (hypothesis space);
      • åŸÞZºŽæŸä¸ªè¯„ä­h标准 (evaluation criterion), 从假讄¡©ºé—´ä¸­é€‰å–一个最优的模型
        • 使模型在¾l™å®šçš„评价准则下åQŒå¯¹å·²çŸ¥è®­ç»ƒæ•°æ®åŠæœªçŸ¥æµ‹è¯•æ•°æ?(test data) 都有最优的预测åQ?
      • 最优模型的选取都由½Ž—法实现ã€?
    • 无监督学ä¹?(unsupervised learning):
    • 半监督学ä¹?(semi-supervised learning):
    • 强化学习 (reinforcement learning):
  • ¾lŸè®¡å­¦ä¹ æ–ÒŽ³•çš„三个要ç´?
    • 模型 (model): 模型的假讄¡©ºé—ß_¼›
    • ½{–ç•¥ (strategy): 模型选择的准则;
    • ½Ž—法 (algorithm): 模型学习的算法ã€?
  • 实现¾lŸè®¡å­¦ä¹ æ–ÒŽ³•çš„æ­¥éª?
    • 得到一个有限的、用于训¾lƒçš„数据集合åQ?
    • 模型的集合:¼‹®å®šåŒ…含所有可能的模型的假讄¡©ºé—ß_¼›
    • 学习的策略:¼‹®å®šæ¨¡åž‹é€‰æ‹©çš„准则;
    • 学习的算法:¼‹®å®šæ±‚解最优模型的½Ž—法åQ?
    • 通过学习的方式选择出最优模型;
    • 利用学习的最优模型对新数据进行分¾cÀLˆ–预测ã€?
  • ¾lŸè®¡å­¦ä¹ ä¸­çš„有监督学习根æ?“解决的问题â€?主要包括
    • 分类问题åQšåˆ¤åˆ«æ¨¡åž‹ï¼Œå¤„理¼›ÀL•£æ•°æ®
    • 预测问题åQšå›žå½’模型,处理˜qžç®‹æ•°æ®
    • 标注问题åQšæ—¢æ˜¯åˆ†¾c»é—®é¢˜çš„推广åQŒåˆæ˜¯é¢„‹¹‹é—®é¢˜çš„½Ž€åŒ–ã€?
  • ¾lŸè®¡å­¦ä¹ æ–ÒŽ³• (statistical learning method): 开发新的学习方法;
  • ¾lŸè®¡å­¦ä¹ ç†è®º (statistical learning theory): 探求¾lŸè®¡å­¦ä¹ æ–ÒŽ³•çš„有效性与效率åQŒä»¥åŠç»Ÿè®¡å­¦ä¹ çš„基本理论问题åQ?
  • ¾lŸè®¡å­¦ä¹ åº”用 (application of statistical learning): ž®†ç»Ÿè®¡å­¦ä¹ æ–¹æ³•åº”用到实际问题中去åQŒè§£å†›_®žé™…问题ã€?
  • 是处理æ“v量数据的有效æ–ÒŽ³•åQ?
  • 是计½Ž—机æ™ø™ƒ½åŒ–的有效手段åQ?
  • 是计½Ž—机¿U‘学发展的重要组成ã€?
  • 监督学习

    • 监督学习的ä“Q务:是学习一个模型,使模型能够对ä»ÀL„¾l™å®šçš„输入,及其相应的输出做å‡ÞZ¸€ä¸ªå¥½çš„预‹¹?

    基本概念

    • 输入½Iºé—´åQšè¾“入数据所有可能取值的集合åQ›é›†åˆä¸­å…ƒç´ çš„个数可以有限,也可以是整个½Iºé—´åQ?
    • 输出½Iºé—´åQšè¾“出数据所有可能取值的集合åQ›é›†åˆä¸­å…ƒç´ çš„个数可以有限,也可以是整个½Iºé—´åQ?
    • 假设½Iºé—´åQšç”±è¾“å…¥½Iºé—´åˆ°è¾“出空间的映射的集合,卛_¯ä¾›é€‰æ‹©çš„模型构成的½Iºé—´åQ?
    • 特征½Iºé—´åQšæ‰€æœ‰ç‰¹å¾å‘量存在的½Iºé—´ã€?
      • 每个具体的输入是一个实ä¾?(instance), 通常ç”Þq‰¹å¾å‘é‡?(feature vector) 表示ã€?
    • ¾lŸè®¡å­¦ä¹ ä¸­çš„有监督学习根æ?“输入变量â€?å’?“输出变量â€?的不同主要包æ‹?
      • 分类问题åQšè¾“出变量äؓ有限个离散变量的预测问题åQ?
      • 回归问题åQšè¾“入变量与输出变量均äؓ˜qžç®‹å˜é‡åQ?
      • 标注问题åQšè¾“入变量与输出变量均äؓ变量序列的预‹¹‹é—®é¢˜ï¼›
    • 联合概率分布åQšè¾“入变量与输出变量遵åó@联合分布åQ?

    问题的åŞ式化描述

    • 在学习过½E‹ä¸­åQŒå­¦ä¹ ç³»¾lŸï¼ˆä¹Ÿå°±æ˜¯å­¦ä¹ ç®—法)试图通过¾l™å®šçš„è®­¾lƒæ•°æ®é›†åˆä¸­çš„样本带来的信息来学习得到模型ã€?

    ¾lŸè®¡å­¦ä¹ ä¸‰ä¸ªè¦ç´ 

    • ¾lŸè®¡å­¦ä¹ æ–ÒŽ³• = 模型 + ½{–ç•¥ + ½Ž—法

    模型

    • 主要问题åQšå­¦ä¹ ä»€ä¹ˆæ ·çš„模型?
    • 模型的假讄¡©ºé—ß_¼šåŒ…含所有可能的条äšg概率分布或决½{–函敎ͼŒå³ç”±ä¸€ä¸ªå‚数向量决定的函数族,也称为参数空é—?(parameter space)ã€?
    • 模型分类
      • 非概率模型:由决½{–函数表½Cºçš„模型åQ?
      • 概率模型åQšç”±æ¡äšg概率表示的模型;

    ½{–ç•¥

    • 主要问题åQšæŒ‰ç…§ä»€ä¹ˆæ ·çš„准则,学习得到最优的模型åQŒæˆ–者从假设½Iºé—´ä¸­é€‰æ‹©æœ€ä¼˜çš„模型ã€?
    • 基本概念
      • 损失函数 (loss function) 或代价函æ•?(cost function): 度量模型一‹Æ¡é¢„‹¹‹çš„好坏åQ?
      • 风险函数 (risk function) 或期望损å¤?(expected loss): 度量òq›_‡æ„ä¹‰ä¸‹æ¨¡åž‹é¢„‹¹‹çš„好坏ã€?
      • ¾léªŒé£Žé™© (empirical risk) 或经验损å¤?(empirical loss): 表示模型与训¾lƒæ•°æ®çš„破例½E‹åº¦åQŒå³æ¨¡åž‹è®­ç»ƒæ ähœ¬é›†çš„òq›_‡æŸå¤±åQŒå½“æ ähœ¬å®šw‡­‘‹äºŽæ— ç©·æ—Óž¼Œ¾léªŒé£Žé™©é€ÆD¿‘期望风险åQ?
      • ¾l“构风险 (structural risk): 表示模型先验知识åQŒä¾‹å¦‚:模型复杂度的正则化项 (regularizer) 或惩¾|šé¡¹ (penalty term)ã€?
    • 常用的损失函æ•?
      • 0-1 损失函数
      • òqÏx–¹æŸå¤±å‡½æ•°
      • ¾lå¯¹å€¼æŸå¤±å‡½æ•?
      • å¯ÒŽ•°æŸå¤±å‡½æ•°æˆ–对æ•îC¼¼ç„¶æŸå¤±å‡½æ•?
    • 学习目标
      • 理想状态:ž®±æ˜¯é€‰æ‹©æœŸæœ›é£Žé™©æˆ–期望损失最ž®çš„模型åQŒå¸Œæœ›å¯ä»¥æä¾›æ— é™çš„数据训练åQ?
      • 现实状态:ž®±æ˜¯é€‰æ‹©¾léªŒé£Žé™©æˆ–经验损失最ž®çš„模型åQŒå› ä¸ºåªèƒ½æä¾›æœ‰é™çš„数据训练åQ?
    • ¾léªŒé£Žé™©çŸ«æ­£åQšå½“æ ähœ¬å®šw‡˜q‡å°æ—Óž¼Œå®ÒŽ˜“出现 “过拟合â€?问题åQŒæ‰€ä»¥éœ€è¦å¯¹¾léªŒé£Žé™©˜q›è¡ŒçŸ«æ­£åQŒç»éªŒé£Žé™©æœ€ž®åŒ– + ¾l“构风险最ž®åŒ–
      • ¾léªŒé£Žé™©æœ€ž®åŒ– (empirical risk minimization, ERM): 极大似然估计
      • ¾l“构风险最ž®åŒ– (structural risk minimization, SRM): 最大后验估è®?

    ½Ž—法

    • ¾lŸè®¡å­¦ä¹ æ˜¯åŸºäºŽè®­¾lƒæ•°æ®é›†åQŒæ ¹æ®å­¦ä¹ ç­–略,从假讄¡©ºé—´ä¸­é€‰æ‹©æœ€ä¼˜æ¨¡åž‹ï¼Œæœ€åŽéœ€è¦è€ƒè™‘用什么样的计½Ž—方法求解最优模型ã€?
    • ½Ž—法 卌™®¡½Ž—方法。统计学习的½Ž—法ž®Þp{化äؓ求解最优化问题的算法ã€?
      • 有显式的解析解的最优化问题åQ?
      • 无显式的解析解的最优化问题åQŒéœ€è¦ç”¨æ•°å€ÆD®¡½Ž—çš„æ–ÒŽ³•æ±‚解ã€?
        • 如何保证扑ֈ°å…¨å±€æœ€ä¼˜è§£åQ?
        • 如何保证求解的过½E‹é«˜æ•ˆã€?

    模型的评ä¼îC¸Žé€‰æ‹©

    • 1.4~1.7, 与模型选择有关的问题ã€?
    • 1.8~1.10, 与模型应用有关的问题ã€?

    模型评估

    • 学习æ–ÒŽ³•è¯„ä¼°çš„æ ‡å‡?
      • åŸÞZºŽæŸå¤±å‡½æ•°çš„模型的训练误差 (training error): 用来评估一个学习问题是否容易学ä¹?
      • åŸÞZºŽæŸå¤±å‡½æ•°çš„模型的‹¹‹è¯•è¯¯å·® (test error): 用来评估一个模型是否具备更有效的预‹¹?
    • 泛化能力 (generalization ability): 学习æ–ÒŽ³•å¯ÒŽœªçŸ¥æ•°æ®çš„预测能力

    模型选择

    • ˜q‡æ‹Ÿå?(over-fitting): 学习旉™€‰æ‹©çš„模型所包含的参数过多,以至于模型对已知数据预测较好åQŒæœªçŸ¥æ•°æ®é¢„‹¹‹è¾ƒå·®çš„问题
    • 模型选择的常用方æ³?
      • 正则åŒ?
      • 交叉验证

    正则化与交叉验证

  • 正则åŒ?(regularization): ¾l“构风险最ž®åŒ–½{–略的实玎ͼŒæ˜¯åœ¨¾léªŒé£Žé™©ä¸ŠåŠ ä¸€ä¸ªæ­£åˆ™åŒ–™åҎˆ–惩罚™åV€?
    • 正则化项一般是模型复杂度的单调递增函数ã€?
      • 复杂度定义可以参è€?Kolmogorov 复杂性理è®?(complexity theory) [Haykin, 2011] P48
    • Occam 剃刀原理åQšåº”用于模型选择时符合正则化的想法,åÏx‰€æœ‰èƒ½å¤Ÿè§£é‡Šæ•°æ®çš„模型中,复杂度越ž®è¶Šå¥½ã€?
    • Bayes 估计åQšæ­£åˆ™åŒ–™å¹å¯¹åº”于模型的先验概率。数据较ž®‘时先验概率ž®±å¯ä»¥æŠ‘制数据中噪声的干扎ͼŒé˜²æ­¢å‡ºçŽ°˜q‡æ‹Ÿåˆé—®é¢˜ã€‚数据很多时åQŒå…ˆéªŒæ¦‚率就让位于数据对模型的解释ã€?
    • 正则化是优化学习½Ž—法åQŒè°ƒæ•´ç›®æ ‡å‡½æ•ŽÍ¼Œå¢žåŠ å…ˆéªŒçŸ¥è¯†çš„重要手ŒDµï¼Œæ˜¯æœºå™¨å­¦ä¹ çš„核心之一ã€?
      • ½Ž€å•äº†è§£ï¼š[周志华,2018] P133
      • 深入理解åQš[Haykin, 2011] C07
  • 交叉验证

    • 交叉验证 (cross validation)
      • 在数据充­‘Ïx—¶åQŒéšæœºåœ°ž®†æ•°æ®åˆ‡åˆ†æˆä¸‰ä¸ªéƒ¨åˆ†åQšè®­¾lƒé›†ã€éªŒè¯é›†å’Œæµ‹è¯•é›†ã€?
        • 选择寚wªŒè¯é›†æœ‰æœ€ž®é¢„‹¹‹è¯¯å·®çš„模型ã€?
      • 训练é›?(training set): 用来训练模型åQ?
      • 验证é›?(validation set): 用来选择模型åQ?
      • ‹¹‹è¯•é›?(test set): 用来评估模型ã€?
    • 交叉验证的常用方æ³?
      • ½Ž€å•äº¤å‰éªŒè¯ï¼šéšæœºåœ°å°†æ•°æ®åˆ†æˆä¸¤ä¸ªéƒ¨åˆ†åQ?0% 的数据äؓ训练集,30% 的数据äؓ‹¹‹è¯•é›†ï¼Œé€‰æ‹©‹¹‹è¯•è¯¯å·®æœ€ž®çš„模型åQ?
      • S 折交叉验è¯?
        • 随机地将数据分成 S 个互不相交的大小相同的部åˆ?
        • 然后利用 S-1 个部分的数据训练åQ? 个子集测试模型,
        • 再将˜q™ä¸€ä¸ªè¿‡½E‹å¯¹æ‰€æœ‰å¯èƒ½çš„选择重复˜q›è¡ŒåQ?
        • 最后选择 S ‹Æ¡è¯„‹¹‹ä¸­òq›_‡‹¹‹è¯•è¯¯å·®æœ€ž®çš„模型ã€?
      • 留一交叉验证åQšå½“ S=N 旉™‡‡ç”¨çš„ S 折交叉验证,适用于数据极度缺乏的情况下ã€?N 为给定数据集的容量)

    泛化能力

    泛化误差

    • 泛化能力 (generalization ability): 是指学习æ–ÒŽ³•å­¦ä¹ åˆ°çš„模型å¯ÒŽœªçŸ¥æ•°æ®çš„预测能力
    • 泛化误差 (generalization error): 是指学到的模型对未知数据预测产生的误差,反映了学习方法的泛化能力ã€?

  • 泛化误差的上ç•?(generalization error bound): 泛化误差的概率上界,通过比较两种学习æ–ÒŽ³•çš„泛化误差概率上界来¼‹®å®šä¼˜åŠ£
  • 泛化误差上界的性质
    • 是样本容量的函数åQŒå½“æ ähœ¬å®šw‡å¢žåŠ æ—Óž¼Œæ³›åŒ–上界­‘‹å‘äº?0;
    • 是假讄¡©ºé—´çš„函数åQŒå½“假设½Iºé—´å®šw‡å¢žåŠ æ—Óž¼Œæ³›åŒ–误差上界ž®×ƒ¼šå˜å¤§åQŒè¡¨½Cºæ¨¡åž‹å°±æ›´åŠ éš‘Ö­¦ã€?
  • 泛化误差上界定理及证æ˜?/em>åQˆå¾è®®èŸ©˜q‡ï¼‰
  • 生成模型 (generative model): 模型表示了给定输å…?X 产生输出 Y 的生成关¾p…R€?
    • 特点
      • ˜q˜åŽŸå‡ø™”合概率分布;
      • 学习收敛速度快;
      • æ ähœ¬å®šw‡å¢žåŠ æ—Óž¼Œèƒ½å¤Ÿæ›´å¥½åœ°é€ÆD¿‘真实模型åQ?
      • 存在隐变量时åQŒä»ç„¶å¯ä»¥ä‹É用ã€?
    • 应用åQšæœ´ç´?Bayes æ–ÒŽ³•å’Œéšé©¬å°”可夫模型 (Hidden Markov Model, HMM);
    • 注:生成模型是比较难理解的概念,HMM 是理解生成模型比较好的途径åQŒå¦‚果对 HMM 感兴­‘£å¯ä»¥å‚è€?
      • ½Ž€å•äº†è§£ï¼š[周志华,2018] P320
      • 深入理解åQš[Rabiner, 1989]
  • 判别模型 (discriminative model): 由数据直接学习决½{–函数或者条件概率分布作为预‹¹‹çš„模型
    • 特点
      • 直接学习得到条äšg概率分布或者决½{–函敎ͼ›
      • 直接面对预测åQŒå­¦ä¹ çš„准确率更高;
      • åŸÞZºŽå‚数是直接学习得到的åQŒå› æ­¤å¯ä»¥å¯¹æ•°æ®˜q›è¡Œå„种½E‹åº¦ä¸Šçš„抽象、定义和使用特征åQŒç®€åŒ–学习问题ã€?
    • 应用åQšk ˜q‘邻法、感知机、决½{–树、Logistic 回归模型、最大熵模型、支持向量机、提升方法和条äšg随机场等
  • 分类问题

    • 分类å™?(classifier): 监督学习从数据中学习得到的分¾cÀL¨¡åž‹æˆ–分类决策函数ã€?
    • 分类 (classification): 利用分类器对新输入的数据˜q›è¡Œè¾“出的预‹¹‹ã€?
    • 解决分类问题的两个过½E?
      • 学习˜q‡ç¨‹åQšæ ¹æ®å·²çŸ¥çš„训练数据集利用有效的“学习方法”得åˆîC¸€ä¸ªåˆ†¾cÕd™¨åQ?
      • 分类˜q‡ç¨‹åQšåˆ©ç”¨å­¦ä¹ å¾—到的分类器对新输入的实例˜q›è¡Œåˆ†ç±»ã€?
    • 评ä­h分类器性能的指标:分类准确çŽ?(accuracy), 卛_¯¹äºŽç»™å®šçš„‹¹‹è¯•æ•°æ®é›†ï¼Œåˆ†ç±»å™¨æ­£¼‹®åˆ†¾cȝš„æ ähœ¬æ•îC¸Žæ€ÀL ·æœ¬æ•°ä¹‹æ¯”ã€?
      • 二类分类问题常用的评ä»ähŒ‡æ ‡ï¼š¾_„¡¡®çŽ?(precision) 与召回率 (recall)ã€?
    • 解决分类问题的常用方法:k ˜q‘邻法、感知机、朴ç´?Bayes 法,决策树、决½{–列表、Logistc 回归模型、支持向量机、提升方法等

    标注问题

    • 标注问题åQšæ˜¯åˆ†ç±»é—®é¢˜çš„推òq¿ï¼Œä¹Ÿæ˜¯æ›´å¤æ‚çš„¾l“构预测问题的简单åŞ式ã€?
      • 输入是一个观‹¹‹åºåˆ—ï¼›
      • 输出是一个标记序列或状态序列ã€?
      • 目标是通过学习得到能够对观‹¹‹åºåˆ—给出标记序列作为预‹¹‹çš„模型ã€?
    • 解决标注问题的两个过½E‹ï¼šå­¦ä¹ ˜q‡ç¨‹ å’?标注˜q‡ç¨‹
    • 评ä­h标注问题的指标:准确率、精¼‹®çŽ‡å’Œå¬å›žçŽ‡ã€?
    • 解决标注问题的常用方法:éš?Markov 模型和条仉™šæœºåœºã€?

    回归问题

    • 回归 (regression): 用于预测输入变量åQˆè‡ªå˜é‡åQ‰å’Œè¾“出变量åQˆå› å˜é‡åQ‰ä¹‹é—´çš„关系ã€?
    • 回归模型åQšè¡¨½CÞZ»Žè¾“入变量到输出变量之间的映射关系的函数ã€?
      • ½{‰ä­h于:函数拟合ã€?
    • 解决回归问题的两个过½E‹ï¼šå­¦ä¹ ˜q‡ç¨‹å’Œé¢„‹¹‹è¿‡½E‹ã€?
    • 回归问题的分¾c?
      • 按输入变量的个数åQšä¸€å…ƒå›žå½’和多元回归åQ?
      • 按输入变量和输出变量之间的关¾p»ï¼š¾U¿æ€§å›žå½’和非线性回归ã€?
    • 回归学习最常用的损失函敎ͼšòqÏx–¹æŸå¤±å‡½æ•°åQŒæ±‚解åã^æ–ÒŽŸå¤±å‡½æ•°å¯ä»¥ç”¨æœ€ž®äºŒä¹˜æ³•ã€?

  • 模型
    • 感知机,是根据输入实例的特征向量对其˜q›è¡ŒäºŒç±»åˆ†ç±»çš„线性分¾cÀL¨¡åž‹ï¼Œå±žäºŽåˆ¤åˆ«æ¨¡åž‹åQ?
    • 模型参数包括åQšæƒå€¼æˆ–权值向量,偏置ã€?
    • 模型对应于输入空é—ß_¼ˆç‰¹å¾½Iºé—´åQ‰ä¸­çš„分¼›»è¶…òq³é¢åQ?
  • ½{–ç•¥
    • 假设åQšæ„ŸçŸ¥æœºå­¦ä¹ çš„è®­¾lƒæ•°æ®é›†æ˜¯çº¿æ€§å¯åˆ†çš„åQ?
    • 目标åQšæ±‚得一个能够将训练集正实例点和负实例点完全正确分开的分¼›»è¶…òq³é¢åQ?
    • ½{–ç•¥åQšå³å®šä¹‰åQˆç»éªŒï¼‰æŸå¤±å‡½æ•°åQŒåƈž®†æŸå¤±å‡½æ•°æžž®åŒ–åQ?
      • 损失函数定义为:误分¾cȝ‚¹çš„æ€ÀL•°åQŒä¸æ˜“优化;
      • 损失函数定义为:误分¾cÕdˆ°åˆ†ç¦»­‘…åã^面的总距¼›»ï¼›
  • ½Ž—法
    • 感知机学习算法是åŸÞZºŽè¯¯å·® - 修正的学习思想åQŒæ˜¯ç”Þp¯¯åˆ†ç±»é©±åŠ¨çš„ï¼›
    • 学习½Ž—法的优化方æ³?
      • 扚w‡å­¦ä¹ å¯ä»¥åŸÞZºŽ˜q›è¡Œä¼˜åŒ–
        • 一é˜Óž¼šæœ€é€Ÿä¸‹é™æ³•æˆ–梯度下降法åQ?
        • 二阶åQšç‰›™å¿æ³•ã€å…±è½­æ¢¯åº¦æ³•½{‰ç­‰
      • 在线学习åQšåŸºäºŽéšæœºæ¢¯åº¦ä¸‹é™æ³•çš„对损失函数˜q›è¡Œæœ€ä¼˜åŒ– [Goodfellow, 2017] P95, P180
        • 原始形式åQšç®—法简单且易于实现。先ä»ÀL„é€‰å–一个超òq³é¢åQŒç„¶åŽéšæœºé€‰æ‹©ä¸€ä¸ªè¯¯åˆ†ç±»ç‚¹ä‹É其用梯度下降法极ž®åŒ–目标函数
          • ä¾?2.1åQˆæ¯”较简单,可以了解åQ?
          • 定理 2.1åQˆè¿‡äºŽç®€ç•¥ï¼Œå»ø™®®è·Œ™¿‡åQ?
        • 对偶形式 åQˆæ²¡çœ‹å‡ºä¸ŽåŽŸå§‹åŞ式有何区别,也没从别的书上看到过˜q™ç§è¯´æ˜Žæ–¹å¼åQŒå¾è®®èŸ©˜q‡ï¼‰
    • 当训¾lƒæ•°æ®é›†¾U¿æ€§å¯åˆ†æ—¶åQŒæ„ŸçŸ¥æœºå­¦ä¹ ½Ž—法是收敛的åQŒä¸”有无½I·å¤šä¸ªè§£ã€?
  • 学习æ€È»“
    • 感知机是¼œžç»¾|‘络的基¼‹€åQŒæœ¬ç« åªæœ‰å•ä¸ªç¥ž¾lå…ƒæ¨¡åž‹åQŒæ·±å…¥å­¦ä¹ å‚è€?[Haykin, 2011]
    • ¼œžç»¾|‘络是深度学习的基础åQŒæ·±åº¦å­¦ä¹ å‚è€?[Goodfellow, 2017]
    • 距离度量是几何的概念åQŒç†è®ºå¯å‚è€?[Duda, 2003] P154
    • 学习½Ž—法的优化是最优化理论åQŒåŸºæœ¬ä¼˜åŒ–方法可参è€?[Hyvarinen, 2007] P42
  • k ˜q‘é‚»æ³?/em>

    • k ˜q‘é‚»æ³?(k-nearest neighbor, k-NN) 是一个基本且½Ž€å•çš„æ–ÒŽ³•åQŒç”¨äºŽåˆ†¾cÖM¸Žå›žå½’ã€?
      • 输入为实例的特征向量åQŒå¯¹åº”于特征½Iºé—´çš„点åQ?
      • 输出为实例的¾cÕdˆ«åQŒå¯ä»¥å–多个¾c…R€?
    • 基本思想
      • 假设¾l™å®šä¸€ä¸ªè®­¾lƒæ•°æ®é›†åQŒå…¶ä¸­çš„实例¾cÕdˆ«å·²ç»¼‹®å®šåQ?
      • å¯ÒŽ–°è¾“入的实例分¾cÀL—¶åQŒæ ¹æ®å…¶ k 个最˜q‘邻的训¾lƒå®žä¾‹çš„¾cÕdˆ«åQŒé€šè¿‡å¤šæ•°è¡¨å†³½{‰æ–¹å¼è¿›è¡Œé¢„‹¹‹ã€?
      • 不具有显式的学习˜q‡ç¨‹ã€?
      • 实际上利用训¾lƒæ•°æ®é›†å¯¹ç‰¹å¾å‘量空间进行切分,òq¶ä½œä¸ºå…¶åˆ†ç±»çš?“模型”ã€?
    • k ˜q‘邻的模åž?
      • 对应于基于训¾lƒæ•°æ®é›†å¯¹ç‰¹å¾ç©ºé—´çš„一个划分ã€?
      • 当训¾lƒé›†ã€è·¼›Õdº¦é‡ã€k 值及分类决策规则¼‹®å®šåŽï¼Œè¾“入实例所属类别也唯一¼‹®å®šã€?
    • k ˜q‘邻法的三个要素
      • 学习准则åQšè·¼›Õdº¦é‡ï¼Œå¸¸ç”¨‹Æ§æ°è·ç¦»åQ›ï¼ˆè·ç¦»å®šä¹‰åQ‰[Duda, 2003]
      • k 值的选择åQšåæ˜ äº†˜q‘似误差与估计误差之间的权衡ã€?
        • k å€ÆD¶Šå¤§æ—¶åQŒè¿‘ä¼ÆD¯¯å·®ä¼šå¢žå¤§åQŒä¼°è®¡è¯¯å·®ä¼šå‡å°åQŒæ¨¡åž‹ä¹Ÿ­‘Šç®€å•ï¼›
        • k å€ÆD¶Šž®æ—¶åQŒè¿‘ä¼ÆD¯¯å·®ä¼šå‡å°‘åQŒä¼°è®¡è¯¯å·®ä¼šå¢žå¤§åQŒæ¨¡åž‹ä¹Ÿ­‘Šå¤æ‚ã€?
        • 可以用交叉验证的方式选择最ä¼?k 倹{€?
      • 分类决策规则åQšå¤šæ•°è¡¨å†Œ™§„åˆ?(marjority voting rule), ½{‰ä­häº?¾léªŒé£Žé™©æœ€ž®åŒ–ã€?
    • k ˜q‘邻法的实现åŸÞZºŽ kd æ ?/em>。(了解卛_¯åQŒå®žé™…应用中大多使用的是已经成熟的èÊY件包åQ?
      • kd 树是一¿Uä¾¿äºŽå¯¹ k ¾l´ç©ºé—´ä¸­çš„数据进行快速检索的数据¾l“æž„åQ?
      • kd 树是二叉树,表示å¯?k ¾l´ç©ºé—´çš„一个划分;
      • kd 树的每个圣战对应äº?k ¾l´ç©ºé—´åˆ’分中的一个超矩åŞ区域åQ?
      • 利用 kd 树可以省åŽÕd¯¹å¤§éƒ¨åˆ†æ•°æ®ç‚¹çš„搜索,从而减ž®‘搜索的计算量ã€?
    • 学习æ€È»“
      • 了解卛_¯åQŒå› ä¸ºé¢å¯šw«˜¾l´é—®é¢˜æ•ˆæžœå¾ˆå·®ï¼Œéœ€è¦è€ƒè™‘降维操作。[周志华,2018] P225

  • 朴素 (naive) Bayes 法:是基äº?Bayes 定理与所有特征都遵åó@条äšg独立性假讄¡š„分类æ–ÒŽ³•ã€?
    • 朴素 Bayes 法是 Bayes 分类法的一¿Uï¼Œéµåó@ Bayes 定理建模。[Mitchell, 2003] P112
    • 朴素 Bayes 法基于的条äšg独立性假设是说用于分¾cȝš„特征在类别确定的条äšg下都是条件独立的。简化了计算复杂度,牺牲了分¾cÕd‡†¼‹®çŽ‡ã€?
    • 朴素 Bayes 法是生成学习æ–ÒŽ³•ã€?
      • 先验概率分布åQ?
      • 条äšg概率分布åQ?
      • 后验概率分布。后验概率最大化准则½{‰ä­h于期望风险最ž®åŒ–准则ã€?
      • 目标åQšç”±è®­ç»ƒæ•°æ®å­¦ä¹ è”合概率分布åQ?
    • 朴素 Bayes æ–ÒŽ³•çš?strong>概率参数估计æ–ÒŽ³•åQ?
      • 极大似然估计 : 概率估计常用的方法;
      • Bayes 估计 : 重点在于了解与极大似然估计的差别åQŒæ‰å¯ä»¥æ­£ç¡®ä½¿ç”¨ã€?
  • 学习æ€È»“
    • 虽然不需要自å·×ƒ¼°è®¡å‚敎ͼŒä½†æ˜¯å¯¹ä¼°è®¡çš„理解很重要,书中的描˜q°è¿‡äºŽç®€å•ï¼Œå…·ä½“内容请参è€?[Duda, 2003] P67
    • 对于概念上的理解˜q˜å¯ä»¥å‚è€?[周志华,2018] C07
  • C05. 决策æ ?(decision tree)

    • 决策树模åž?/strong>
      • 决策树是一¿UåŸºæœ¬æ–¹æ³•ï¼Œç”¨äºŽåˆ†ç±»ä¸Žå›žå½’ã€?
        • 本章主要讨论的是分类决策树ã€?
      • 分类决策树模åž?
        • 定义åQšæ˜¯åŸÞZºŽç‰¹å¾å¯¹å®žä¾‹è¿›è¡Œåˆ†¾cȝš„æ ‘å޾l“æž„ã€?
        • 模型的组成结æž?
          • ¾l“点 (node)
            • 内部¾l“点 (internal node)
            • 叶结ç‚?(leaf node)
          • 有向è¾?(directed edge)
        • 分类决策树可以è{换成一ä¸?if-then 规则的集合;
          • 决策树的根结点到叶结点的每一条èµ\径构å»ÞZ¸€æ¡è§„则;
          • 路径上内部结点的特征对应着规则的条ä»Óž¼Œè€Œå¶¾l“点的类对应着规则的结论ã€?
          • 重要的性质åQšäº’æ–¥åƈ且完备,卛_…¨è¦†ç›–ã€?
            • 覆盖是指实例的特征与路径上的特征一致或实例满èƒö规则的条件ã€?
        • 也可以看作是定义在特征空间与¾cȝ©ºé—´ä¸Šçš„条件概率分布ã€?
          • ˜q™ä¸ªæ¡äšg概率分布定义在特征空间的一个划分上åQ?
          • ž®†ç‰¹å¾ç©ºé—´åˆ’分äؓ互不ç›æ€º¤çš„单元或区域åQ?
          • òq¶åœ¨æ¯ä¸ªå•å…ƒå®šä¹‰ä¸€ä¸ªç±»çš„概率分布就构成了一个条件概率分布ã€?
          • 决策树分¾cÀL—¶åQŒå°†¾l“点的实例分到条件概率大的类中ã€?
        • 主要优点åQšå¯è¯ÀL€§å¼ºåQŒåˆ†¾c»é€Ÿåº¦å¿«ã€?
    • 决策树学ä¹?
      • 学习目的
        • æ ÒŽ®¾l™å®šçš„è®­¾lƒæ•°æ®é›†åQŒæž„å»ÞZ¸€ä¸ªä¸Žè®­ç»ƒæ•°æ®æ‹Ÿåˆå¾ˆå¥½åQŒåƈ且复杂度ž®çš„决策树,使之能够对实例进行正¼‹®çš„分类ã€?
        • 决策树与训练数据的矛盾较ž®ï¼ŒåŒæ—¶˜q˜å…·æœ‰è¾ƒå¥½çš„泛化能力ã€?
        • 也可以看作由训练数据集估计条件概率模åž?
          • 模型对训¾lƒæ•°æ®æ‹Ÿåˆçš„效果很好åQ?
          • 模型å¯ÒŽœªçŸ¥æ•°æ®æœ‰å¾ˆå¥½çš„预‹¹‹ã€?
        • 从所有可能的决策树中选取最优决½{–æ ‘æ˜?NP 完全问题åQ?
          • 现实中采用启发式æ–ÒŽ³•å­¦ä¹ ‹Æ¡ä¼˜çš„决½{–æ ‘ã€?
      • 学习准则åQšæŸå¤±å‡½æ•°æœ€ž®åŒ–ã€?
        • 损失函数是一¿Uæ­£åˆ™åŒ–的极大似然函æ•?
      • 学习½Ž—法
        • 递归地选择最优特征,òq¶æ ¹æ®è¯¥ç‰¹å¾å¯¹è®­¾lƒæ•°æ®è¿›è¡Œåˆ†å‰ÔŒ¼Œä½¿ä¹‹å¯¹å„个数据集有一个最好的分类的过½E‹ã€?
    • 决策树的学习½Ž—法包括 3 个部åˆ?
      • 特征选择
        • 特征选择的目的在于选取对训¾lƒæ•°æ®èƒ½å¤Ÿåˆ†¾cȝš„特征åQŒæé«˜å†³½{–树学习的效率;
        • 特征选择的关键是其准åˆ?
          • æ ähœ¬é›†åˆ D 对特å¾?A çš?strong>信息增益 最å¤?
            • 信息增益定义为集å?D 的经验熵与特å¾?A 在给定条件下 D 的经验条件熵之差ã€?
              • 熵:表示随机变量不确定性的度量。也¿UîCؓ¾léªŒç†üc€?
              • 条äšg熵:定义ä¸?X ¾l™å®šæ¡äšgä¸?Y 的条件概率分布的熵对 X 的数学期望。也¿UîCؓ¾léªŒæ¡äšgç†üc€?
            • 信息增益表示得知特征 X 的信息而ä‹É得类 Y 的信息的不确定性减ž®‘çš„½E‹åº¦ã€?
            • 信息增益½{‰ä­h于训¾lƒæ•°æ®é›†ä¸­ç±»ä¸Žç‰¹å¾çš„互信息ã€?
            • 信息增益依赖于特征,信息增益大的特征å…ähœ‰æ›´å¼ºçš„分¾c»èƒ½åŠ›ã€?
          • æ ähœ¬é›†åˆ D 对特å¾?A çš?strong>信息增益æ¯?/strong> 最å¤?
            • ä¸ÞZº†é¿å…ä¿¡æ¯å¢žç›Šå¯¹å–å€ÆD¾ƒå¤šçš„特征的偏重,使用信息增益比来代替åQ?
            • 信息增益比:特征 A 对训¾lƒæ•°æ®é›† D 的信息增益与训练数据é›?D 关于特征 A 的值的熵之比ã€?
          • æ ähœ¬é›†åˆ D çš?strong>基尼指数 最ž®?
      • 树的生成
        • 计算指标åQŒå†æ ÒŽ®å‡†åˆ™é€‰å–最优切分点åQŒä»Žæ ¹ç»“点开发,递归åœîCñ”生决½{–æ ‘ã€?
        • 通过不断地选择局部最优的特征åQŒå¾—到可能是全局‹Æ¡ä¼˜çš„结果ã€?
      • 树的剪枝åQšå°†å·²ç»ç”Ÿæˆçš„æ ‘˜q›è¡Œ½Ž€åŒ–çš„˜q‡ç¨‹ã€?
        • 目的åQšç”±äºŽç”Ÿæˆçš„决策树存在过拟合问题åQŒéœ€è¦å¯¹å®ƒè¿›è¡Œå‰ªæžï¼Œä»¥ç®€åŒ–学到的决策树ã€?
        • 剪枝的准则:极小化决½{–树整体的损失函数或代ä­h函数åQŒç­‰ä»·äºŽæ­£åˆ™åŒ–的极大似然估计ã€?
        • 剪枝的分¾c?
          • 预剪枝:也叫分支停止准则。在决策树生成过½E‹ä¸­åQŒå¯¹æ¯ä¸ª¾l“点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升åQŒåˆ™åœæ­¢åˆ’分òq¶å°†å½“前¾l“点标记为叶¾l“点åQ?
          • 后剪枝:先从训练集生成一‹‚µå®Œæ•´çš„决策树,然后自底向上地对非叶¾l“点˜q›è¡Œè€ƒå¯ŸåQŒè‹¥ž®†è¯¥¾l“点对应的子树替换äؓ叶结点能带来决策树泛化性能提升åQŒåˆ™ž®†è¯¥å­æ ‘替换为叶¾l“点ã€?
      • 常用的学习算æ³?
        • ID3: 在决½{–树的各个结点上应用信息增益准则选择特征åQŒé€’归地构建决½{–树。相当于用极大似然法˜q›è¡Œæ¦‚率模型的选择ã€?
        • C4.5: 在决½{–树的各个结点上应用信息增益比准则选择特征åQŒé€’归地构建决½{–æ ‘ã€?
        • CART: 既可用于分类åQŒä¹Ÿå¯ç”¨äºŽå›žå½’ã€?
          • ½{‰ä­h于递归åœîCºŒåˆ†æ¯ä¸ªç‰¹å¾ï¼Œž®†è¾“入空间即特征½Iºé—´åˆ’分为有限个单元åQŒåƈ在这些单元上¼‹®å®šé¢„测的概率分布,也就是在输入¾l™å®šçš„条件下输出的条件概率分布ã€?
          • CART ½Ž—法的两个过½E?
            • 决策树生成:åŸÞZºŽè®­ç»ƒæ•°æ®é›†ç”Ÿæˆå†³½{–æ ‘åQŒè¦ž®½é‡å¤§ï¼›
              • 回归树生æˆ?
                • 用åã^方误差最ž®å‡†åˆ™æ±‚解每个单元上的最优输出倹{€?
                • 回归树通常¿UîCؓ最ž®äºŒä¹˜å›žå½’æ ‘ã€?
              • 分类树生æˆ?
                • 用基ž®¼æŒ‡æ•°é€‰æ‹©æœ€ä¼˜ç‰¹å¾ï¼Œòq¶å†³å®šè¯¥ç‰¹å¾çš„最优二值切分点ã€?
                • ½Ž—法停止计算的条ä»?
                  • ¾l“点中的æ ähœ¬ä¸ªæ•°ž®äºŽé¢„定阈å€û|¼›
                  • æ ähœ¬é›†çš„基尼ž®äºŽé¢„定阈å€û|¼›
            • 决策树剪æž?
              • 用验证数据集对已¾lç”Ÿæˆçš„树进行剪枝,剪枝的标准äؓ损失函数最ž®ï¼ŒåŸÞZºŽæ ‡å‡†é€‰æ‹©æœ€ä¼˜å­æ ‘ã€?
              • 可以通过交叉验证法对用于验证的独立数据集上的子树序列˜q›è¡Œ‹¹‹è¯•åQŒä»Žä¸­é€‰æ‹©æœ€ä¼˜å­æ ‘ã€?
            • [Duda, 2003] P320, CART 作äؓ通用的框æžÓž¼Œå®šä¹‰äº?6 个问é¢?
    • 决策树的预测
      • å¯ÒŽ–°çš„数据,利用决策树模型进行分¾c…R€?
    • 学习æ€È»“
      • ½Ž—法 (5.1, 5.2, 5.6) + 例题 ( 5.1, 5.2, 5.3, 5.4 ) 通过½Ž—法和例题可以增强理解;
      • 损失函数的定义可以进一步参è€?“不¾U¯åº¦â€?指标 [Duda, 2003] P320, æˆ?“纯度â€?指标 [周志华,2018] P75
        • “不¾U¯åº¦â€?指标是求极小å€û|¼Œå¯ä»¥è·Ÿæ¢¯åº¦ä¸‹é™æ³•½{‰æœ€ä¼˜åŒ–理论¾l“合ã€?

    C06. Logistic 回归与最大熵模型

    • 模型
      • Logistic 回归模型åQŒä¹Ÿ¿UîCؓå¯ÒŽ•°å‡ çŽ‡å›žå½’模型åQŒè¾“入是的线性函敎ͼŒè¾“出的是å¯ÒŽ•°å‡ çŽ‡æ¨¡åž‹
        • åŸÞZºŽ Logistic 分布建立的,表示条äšg概率的分¾cÀL¨¡åž?
          • Logistic 分布æ˜?Sigmoid 函数åQ?strong>定义 6.1
        • å¯ÒŽ•°å‡ çŽ‡ (log odds) æˆ?logit 函数
          • 一个事件的几率 (odds) 是指该事件发生的概率与该事äšg不发生的概率的比倹{€?
        • 二项 Logistic 回归模型是二¾cÕdˆ†¾cÀL¨¡åž‹ï¼Œå®šä¹‰ 6.2
        • 多项 Logistic 回归模型是多¾cÕdˆ†¾cÀL¨¡åž?
        • 模型参数估计
          • 极大似然估计æ³?
      • 最大熵模型
        • åŸÞZºŽæœ€å¤§ç†µåŽŸç†æŽ¨å¯¼çš„,表示条äšg概率分布的分¾cÀL¨¡åž‹ï¼Œå¯ä»¥ç”¨äºŽäºŒç±»æˆ–多¾cÕdˆ†¾c…R€?
          • 最大熵原理认äؓåQŒåœ¨æ‰€æœ‰å¯èƒ½çš„概率模型åQˆåˆ†å¸ƒï¼‰çš„集合中åQŒç†µæœ€å¤§çš„模型是最好的模型ã€?
          • 准则åQšæœ€å¤§ç†µåŽŸç†æ˜¯æ¦‚率模型学习或估计的一个准则ã€?
        • 最大熵模型的学ä¹?
          • 最大熵模型的学习过½E‹å°±æ˜¯æ±‚解最大熵模型的过½E?
          • 最大熵模型的学习可以åŞ式化为有¾U¦æŸçš„最优化问题åQˆå¯¹å‰™—®é¢˜ï¼‰
            • 拉格朗日乘子参考附å½?C
        • ä¾?6.1, 6.2 方便理解最大熵模型的算法原理ã€?
    • ½Ž—法
      • 学习采用极大似然估计或者正则化极大似然估计
        • 形式化äؓ无约束最优化问题
      • 求解无约束最优化问题的算æ³?
        • ˜q­ä»£ž®ºåº¦æ³?
        • 梯度下降æ³?
        • 拟牛™å¿æ³•
    • 学习æ€È»“
      • Logistic 模型与最大熵模型都属于对数线性模型。[周志华,2018] C03
      • 极大似然估计åQšä¹¦é‡Œå†™çš„比较简单,没有原理性的说明åQŒæŽ¨èï¼ˆ[周志华,2018] P149, [Duda, 2003] P67åQ?
      • 模型学习的最优化½Ž—法åQšä¹¦é‡Œå†™çš„不太好理解。各¿Uæœºå™¨å­¦ä¹ å’Œæ¨¡å¼è¯†åˆ«çš„书里面都有介绍åQŒæŽ¨èï¼ˆ[周志华,2018] P403, [Hagan, 2006] C09åQ?

  • 支持向量机(Support Vector MachineåQ?SVMåQ‰æ˜¯ä¸€¿UäºŒ¾cÕdˆ†¾cÀL¨¡åž‹ã€?
    • 基本模型是定义在特征½Iºé—´ä¸Šçš„间隔最大的¾U¿æ€§åˆ†¾cÕd™¨
    • 基本概念
      • 支持向量军_®šäº†æœ€ä¼˜åˆ†äº«è¶…òq³é¢
        • 最¾lˆåˆ¤åˆ«æ—¶åQŒåªéœ€è¦å¾ˆž®‘的“重要”训¾lƒæ ·æœ¬ï¼Œå¤§å¹…减少计算量ã€?
      • 间隔åQˆçœ‹æ‡‚数学公式就可以理解间隔åQŒåˆ¤åˆ«åœ¨æ•°æ®çš„维度上又增加了一个维度)
    • 与其他模型的比较
      • 与感知机的区别:间隔最大化产生最优超òq³é¢åQ?
      • 与线性模型的区别åQšä‹É用核技巧成为非¾U¿æ€§åˆ†¾cÕd™¨ã€?
    • 分类
      • ¾U¿æ€§å¯åˆ†æ”¯æŒå‘量机åQŒç¡¬é—´éš”支持向量机ã€?
      • ¾U¿æ€§æ”¯æŒå‘量机åQŒèÊY间隔支持向量机,是最基本的支持向量机ã€?
      • 非线性支持向量机
    • 学习
      • 学习在特征空间进行的
      • 学习½{–略是间隔最大化
  • ¾U¿æ€§å¯åˆ†æ”¯æŒå‘量机 (linear support vector machine in linearly separable case)
    • 条äšgåQšè®­¾lƒæ•°æ®çº¿æ€§å¯åˆ†ï¼›
    • 学习½{–ç•¥åQšç¡¬é—´éš”最大化
      • 求解能够正确划分训练数据集åƈ且几何间隔最大的分离­‘…åã^é?
      • 对训¾lƒæ•°æ®é›†æ‰‘Öˆ°å‡ ä½•é—´éš”最大的­‘…åã^面意味着以充分大的确信度对训¾lƒæ•°æ®è¿›è¡Œåˆ†¾c?
      • ˜q™æ ·çš„超òq³é¢å¯ÒŽœªçŸ¥åŽŸæ–°å®žä¾‹æœ‰å¾ˆå¥½çš„分¾c»é¢„‹¹‹èƒ½åŠ?
    • 解的特征
      • 最优解存在且唯一åQ›ï¼ˆå”¯ä¸€æ€§è¯æ˜?/em>åQŒå¾è®®èŸ©˜q‡ï¼‰
      • 支持向量ç”׃½äºŽé—´éš”边界上的实例点¾l„成åQ?
  • ¾U¿æ€§æ”¯æŒå‘量机 (linear support vector machine)
    • 条äšg
      • 训练数据˜q‘ä¼¼¾U¿æ€§å¯åˆ†ï¼›
      • 训练数据中存在一些特异点 (outlier)
    • 学习½{–ç•¥åQšèÊY间隔最大化
      • 惩罚参数 C * 替代损失函数 fåQŒè¡¨½Cø™¯¯åˆ¤çš„代ä­håQ?
        • hinge 损失åQˆåˆ™å‰|Ÿå¤±å‡½æ•ŽÍ¼‰åQšä¿æŒäº†½E€ç–æ€?
        • 指数损失
        • 对率损失åQšç›¸ä¼égºŽå¯¹çŽ‡å›žå½’模型
      • 目标是ä‹É间隔ž®½é‡å¤§ï¼Œè¯¯åˆ†¾cȝ‚¹ž®½é‡ž®‘ã€?
    • 解的特征
      • 权值唯一åQŒå¾|®ä¸å”¯ä¸€åQ?
      • 支持向量ç”׃½äºŽé—´éš”边界上的实例点、间隔边界与分离­‘…åã^面之间的实例炏V€åˆ†¼›»è¶…òq³é¢è¯¯åˆ†ä¸€ä¾§çš„实例点组成;
      • 最优分享超òq³é¢ç”±æ”¯æŒå‘量完全决定ã€?
  • 非线性支持向量机 (non-linear support vector machine)
    • 基本概念
      • ¾U¿æ€§ç©ºé—ß_¼šæ»¡èƒö¾U¿æ€§æ€§è´¨çš„空é—?
      • 距离åQšæ˜¯ä¸€¿Uåº¦é‡?
        • 距离的集å?âŸ?度量½Iºé—´ + ¾U¿æ€§ç»“æž?âŸ?¾U¿æ€§åº¦é‡ç©ºé—?
      • 范数åQšè¡¨½CºæŸç‚¹åˆ°½Iºé—´é›¶ç‚¹çš„距¼›?
        • 范数的集å?âŸ?赋范½Iºé—´ + ¾U¿æ€§ç»“æž?âŸ?¾U¿æ€§èµ‹èŒƒç©ºé—?
      • 内积½Iºé—´åQšæ·»åŠ äº†å†…积˜qç®—的线性赋范空é—?
        • ¾U¿æ€§èµ‹èŒƒç©ºé—?+ 内积˜qç®— âŸ?内积½Iºé—´
      • ‹Æ§æ°½Iºé—´åQšæœ‰é™ç»´çš„内¿U¯ç©ºé—?
      • 希尔伯特½Iºé—´åQšå†…¿U¯ç©ºé—´æ»¡­‘›_®Œå¤‡æ€§ï¼ŒåÏx‰©å±•åˆ°æ— é™¾l?
        • 内积½Iºé—´ + 完备æ€?âŸ?希尔伯特½Iºé—´
      • 巴拿赫空é—ß_¼šèµ‹èŒƒ½Iºé—´æ»¡èƒö完备æ€?
        • 赋范½Iºé—´ + 完备æ€?âŸ?巴拿赫空é—?
    • 条äšgåQ?
      • 训练数据非线性可分;
      • 通过非线性变换(核函敎ͼ‰ž®†è¾“入空é—ß_¼ˆ‹Æ§æ°½Iºé—´æˆ–离散集合)转化为某个高¾l´ç‰¹å¾ç©ºé—ß_¼ˆå¸Œå°”伯特½Iºé—´åQ‰ä¸­çš„线性可分;
      • 在高¾l´ç‰¹å¾ç©ºé—´ä¸­å­¦ä¹ ¾U¿æ€§æ”¯æŒå‘量机ã€?
    • 学习½{–ç•¥åQšæ ¸æŠ€å·?+ 软间隔最大化
  • 最大间隔法
    • 间隔概念
      • 函数间隔åQšè¡¨½Cºåˆ†¾cȝš„正确性及¼‹®ä¿¡åº?
      • 几何间隔åQšè§„范化后的函数间隔åQŒå®žä¾‹ç‚¹åˆ°è¶…òq³é¢çš„带½W¦å·çš„距¼›?
    • 分类
      • ¼‹¬é—´éš”最大化 (hard margin maximization)
      • 软间隔最大化 (soft margin maximization)
    • 间隔最大化的åŞ式化
      • 求解å‡æ€ºŒ‹Æ¡è§„划问é¢?
        • 最优化½Ž—法
      • 正则化的合页损失函数的最ž®åŒ–问题
    • 求解˜q‡ç¨‹
      • 原始最优化问题应用拉格朗日对偶性;
      • 通过求解对偶问题得到原始问题的最优解ã€?
      • 中间也可以根据需要自然引入核函数ã€?
  • 核技å·?(kernel method) 通用的机器学习方æ³?
    • 应用条äšg
      • 非线性可分训¾lƒæ•°æ®å¯ä»¥å˜æ¢åˆ°¾U¿æ€§å¯åˆ†ç‰¹å¾ç©ºé—ß_¼›
      • 目标函数中的内积可以使用非线性函数的内积替换åQ?
      • 非线性函数的内积可以使用核函数替换;
      • 核函æ•îC‹É非线性问题可解ã€?
    • 常用的核函数
      • ¾U¿æ€§æ ¸åQšå¯¹åº”于¾U¿æ€§å¯åˆ†é—®é¢?
      • 多项式核函数
      • 高斯核函æ•?
      • Sigmoid 核函æ•?
      • 函数¾l„合得到的核函数
        • 两个核函数的¾U¿æ€§ç»„合仍然是核函敎ͼŒk1(x,z) å’?k2(x,z) 是核函数åQŒc1 å’?c2 是ä“Q意正敎ͼŒåˆ?k(x,z)=c1k1(x,z)+c2k2(x,z) 也是核函数ã€?
        • 两个核函数的直积仍然是核函数åQŒk1(x,z) å’?k2(x,z) 是核函数åQŒåˆ™ k(x,z)=k1(x,z)k2(x,z) 也是核函数ã€?
        • k1(x,z) 是核函数åQŒg(z) 是ä“Q意函敎ͼŒåˆ?k(x,z)=g(z)k1(x,z)g(z) 也是核函数ã€?
  • SMO ½Ž—法
    • 支持向量机学习的启发式快速算æ³?
    • ‹¹ç¨‹
      • ž®†åŽŸäºŒæ¬¡è§„划问题分解为只有两个变量的二次规划子问题;
        • ½W¬ä¸€ä¸ªå˜é‡æ˜¯˜qå KKT 条äšg最严重的变量;
        • ½W¬äºŒä¸ªå˜é‡æ˜¯ä½¿ç›®æ ‡å‡½æ•°å¢žé•¿æœ€å¿«çš„变量åQ?
        • 目标是ä‹É两个变量所对应æ ähœ¬ä¹‹é—´çš„间隔最大ã€?
      • 对子问题˜q›è¡Œè§£æžåˆ†è§£åQ?
      • 直到所有变量满­‘?KKT 条äšg为止ã€?
  • 学习æ€È»“
    • 支持向量æœÞZ¸Ž¼œžç»¾|‘络是两大重要的机器学习½Ž—法åQ?
    • ¾l“合周老师的书一èµïLœ‹åQŒå¯¹äºŽç†è§£æ”¯æŒå‘量机会有较大帮助。[周志华,2018] C06
    • 深入了解支持向量机的理论分析。[Haykin, 2011] C06
  • C08. 提升æ–ÒŽ³•åQˆé›†æˆå­¦ä¹ ï¼‰

    提升æ–ÒŽ³•æ˜¯ä¸€¿Uç»Ÿè®¡å­¦ä¹ æ–¹æ³•ï¼Œä¹Ÿæ˜¯ä¸€¿Uæå‡æ¨¡åž‹å­¦ä¹ èƒ½åŠ›å’Œæ³›åŒ–能力的方法,˜q˜æ˜¯ä¸€¿Uç»„合学习(集成学习åQ‰çš„æ–ÒŽ³•åQŒæ˜¯¾lŸè®¡å­¦ä¹ ä¸­æœ€æœ‰æ•ˆçš„方法之一ã€?/p>

    • ä¸ÞZ»€ä¹ˆè¦ž®†å„¿Uå­¦ä¹ æ–¹æ³•ç»„合è“v来?
      • 强可学习æ–ÒŽ³•ä¸Žå¼±å¯å­¦ä¹ æ–¹æ³•çš„½{‰ä­h性;
      • ž®†å„¿Uå¼±å¯å­¦ä¹ æ–¹æ³•ç»„合è“v来就可以提升 (boost) 为强可学习方æ³?
    • 如何ž®†å„¿Uå­¦ä¹ æ–¹æ³•ç»„合è“v来?
      • AdaBoost ½Ž—法
        • 是一¿Ué€šç”¨çš„组合算法,可以ž®†å„¿Uåˆ†¾cȝ®—法进行组合ã€?
      • 提升æ ?
        • 以分¾cÀL ‘或回归树为基本分¾cÕd™¨çš„提升方法(¾l„合½Ž—法åQ?
        • 提升树是¾lŸè®¡å­¦ä¹ ä¸­æ€§èƒ½æœ€å¥½çš„æ–ÒŽ³•ä¹‹ä¸€
      • Bagging ½Ž—法åQˆæœ¬ç« æ— ä»‹ç»åQŒäº†è§£è¯·å‚考[周志华,2018] C8.3åQ?
        • 随机‹‚®æž—
    • AdaBoost ½Ž—法
      • 模型åQšåŠ æ³•æ¨¡åž?
        • 如何改变训练数据的权值和概率分布åQšé‡‡ç”?“分而治之â€?的方法。提高那些被前一轮弱分类器错误分¾cȝš„æ ähœ¬çš„权å€û|¼Œä»Žè€Œä¿è¯åŽä¸€è½®çš„弱分¾cÕd™¨åœ¨å­¦ä¹ è¿‡½E‹ä¸­èƒ½å¤Ÿæ›´å¤šå…Ïx³¨å®ƒä»¬ã€?
        • 如何ž®†å¼±åˆ†ç±»å™¨ç»„合成一个强分类器:采用 “加权多数表决â€?的方法。加大分¾c»è¯¯å·®çŽ‡ž®çš„弱分¾cÕd™¨çš„权å€û|¼Œä»Žè€Œä¿è¯å®ƒä»¬åœ¨è¡¨å†³ä¸­è“v较大的作用ã€?
      • ½{–ç•¥åQšæŒ‡æ•°æŸå¤±å‡½æ•°æžž®åŒ–åQŒå³¾léªŒé£Žé™©æžå°åŒ–ã€?
      • ½Ž—法åQšå‰å‘分步算法来优化分步优化指数损失函数的极ž®åŒ–问题ã€?
      • ½Ž—法的训¾lƒè¯¯å·®åˆ†æž?
        • AdaBoost 能够在学习过½E‹ä¸­ä¸æ–­å‡å°‘训练误差åQŒå³å‡å°‘训练数据集上的分¾c»è¯¯å·®çŽ‡ã€?
          • AdaBoost 的训¾lƒè¯¯å·®æ˜¯ä»¥æŒ‡æ•°é€ŸçŽ‡ä¸‹é™çš„ã€?em>定理与证明徏议蟩˜q?/em>
      • ½Ž—法的优化过½E‹åˆ†æž?
        • 因äؓ学习的是加法模型åQŒæ‰€ä»¥èƒ½å¤Ÿä»Žå‰å‘后,每一步只学习一个基函数及基¾pÀL•°åQŒé€æ­¥é€ÆD¿‘优化目标函数åQŒç®€åŒ–优化的复杂度ã€?
        • 前向分步½Ž—法ä¸?AdaBoost 的关¾p»ï¼šå®šç†ä¸Žè¯æ˜Žå¾è®®èŸ©˜q‡ã€?/em>
    • 提升树模åž?
      • 模型åQšåŠ æ³•æ¨¡åž‹ï¼Œä»¥å†³½{–树为基函数
      • ½{–ç•¥åQšæŸå¤±å‡½æ•?
        • 分类问题åQšæŒ‡æ•°æŸå¤±å‡½æ•?
        • 回归问题åQšåã^方误差函æ•?
        • 一般决½{–问题:一般损失函æ•?
      • ½Ž—法åQšå‰å‘分步算æ³?
        • 梯度提升½Ž—法åQˆGBDTåQ‰ï¼šè§£å†³¼›ÀL•£æ•°æ®çš„优化问题,原理参考、[Friedman, 2001]
    • 学习æ€È»“
      • 学习基础
        • 熟悉重要的分¾cȝ®—法:¼œžç»¾|‘络和支持向量机
        • 熟悉常用的分¾cȝ®—法:k ˜q‘邻法和决策æ ?
      • 学习目标
        • ¾l„合各种分类½Ž—法åQŒä»Žè€Œäñ”生质量更好的学习能力和泛化能力模åž?
      • 胡思äؕæƒ?
        • 全连接的深度¼œžç»¾|‘络ž®±æ˜¯ç†è®ºä¸Šæœ€å®Œç¾Žçš„组合模型,问题在于¾l´åº¦çùNš¾å¸¦æ¥çš„计½Ž—复杂度问题ã€?
        • ä¸ÞZº†è§£å†³è®¡ç®—复杂度问题,ž®±éœ€è¦äº†è§£å…¶ä»–分¾cÀL¨¡åž‹ï¼Œå› äؓ其他分类模型ž®±æ˜¯å…·å¤‡äº†å…ˆéªŒçŸ¥è¯†çš„¼œžç»¾|‘络模型åQŒå°†é‚£äº›åˆ†ç±»æ¨¡åž‹è½¬åŒ–为神¾lç½‘¾lœæ¨¡åž‹åŽž®±å¯ä»¥å¤§òq…减ž®‘连接的数量ã€?
        • 概率˜q‘似正确 (probably approximately correct, PAC) 来自计算学习理论åQŒå¯å‚考[周志华,2018] C12, [Mitchell, 2003] C07
        • 集成学习 (ensemble learning) 也被¿UîCؓ多分¾cÕd™¨¾pȝ»Ÿã€åŸºäºŽå§”员会的学习等åQŒå¯å‚考[周志华,2018] C08

  • 学习基础
    • 概率论:期望
    • 最大似然估计或极大后验估计
    • 梯度下降
  • EM ½Ž—法是对含有隐变量的概率模型˜q›è¡Œæžå¤§ä¼¼ç„¶ä¼°è®¡æˆ–者极大后验估计的˜q­ä»£½Ž—法ã€?
    • E 步,求期望;利用数据和假讄¡š„初å€û|¼Œæ±‚得一个隐变量的条件概率分布的期望åQŒå³ “Q 函数”。(因äؓ无法求得条äšg概率分布的具体å€û|¼‰
    • M 步,求极倹{€‚利ç”?“Q 函数â€?来求极å€û|¼Œ˜q™ä¸ªæžå€¼å¯ä»¥å¸®åŠ©æ‹Ÿåˆçš„概率分布更加é€ÆD¿‘真实分布ã€?
    • Q 函数的定ä¹?/strong>åQˆç†è§?Q 函数的涵义可以更好地推广到应用中åQŒå¼€å§‹ä¸ç†è§£ä¹Ÿæ²¡å…³ç³»åQŒå¯ä»¥åœ¨åº”用中慢慢加深)
    • EM ½Ž—法的推å¯?/strong>åQˆå¦‚果书上的无法理解åQŒè¿˜å¯ä»¥å‚考本文中的其他文献)
      • EM ½Ž—法是收敛的åQŒä½†æ˜¯æœ‰å¯èƒ½æ”¶æ•›åˆ°å±€éƒ¨æœ€ž®å€¹{€?
      • EM ½Ž—法可以看成利用凸函数进行概率密度é€ÆD¿‘åQ?
      • 如果原概率密度函数有多个极å€û|¼Œåˆå€¼çš„不同ž®±å¯èƒ½é€ÆD¿‘åˆîC¸åŒçš„极值点åQŒæ‰€ä»¥æ— æ³•ä¿è¯å…¨å±€æœ€ä¼˜ã€?
    • EM ½Ž—法的应用(下面的两个应用都是重点,但是无法从本书中完全理解åQŒå¯ä»¥åœ¨æœªæ¥çš„应用ç‘ô¾l­æŽ¢ç´¢ï¼‰
      • 高斯混合模型
      • HMMåQˆéš Markov 模型åQ?/strong> 参è€?C10
    • EM ½Ž—法的推òq?/em>åQˆå¾è®®èŸ©˜q‡ï¼Œå¯¹äº†è§?EM ½Ž—法帮助不大åQŒåªæœ‰æ·±å…¥ç†è§£å’Œç ”究 EM ½Ž—法才需要)
      • F 函数的极å¤?- 极大½Ž—法
      • òq¿ä¹‰ EM ½Ž—法åQˆGEMåQ?
  • 学习æ€È»“
  • EM½Ž—法的详¾l†æŽ¨å¯¹{€‚[Borman, 2004], 或者Determined22çš?a >EM½Ž—法½Ž€˜q°åŠ½Ž€å•ç¤ºä¾‹ï¼ˆä¸‰ä¸ª¼‹¬å¸çš„模型)
  • EM½Ž—法的概率分析。[Friedman, 2001], 或者苏剑林çš?a >梯度下降和EM½Ž—法
  • EM½Ž—法的深入理解。可以参考史春奇çš?a >Hinton和Jordan理解的EM½Ž—法
  • C10. éš?Markov 模型åQˆHMMåQ‰çš„½Ž—法及推òq?/strong>

    • 学习基础
      • 随机˜q‡ç¨‹åQšç”¨äºŽç†è§?Markov 铄¡š„数学含义
      • EM ½Ž—法åQšç”¨äºŽè®¡½Ž?HMM 的学习问é¢?
    • Markov 铄¡š„定义
      • 随机˜q‡ç¨‹
        • 研究对象是随旉™—´æ¼”变的随机现象。[盛骤åQ?015] C12
        • è®?T 是一无限实数集,对依赖于参数 tåQˆt 属于 TåQ‰çš„一族(无限多个åQ‰éšæœºå˜é‡ç§°ä¸ºéšæœø™¿‡½E‹ã€?
        • 我的理解
          • 随机˜q‡ç¨‹åœ¨ä“Q一个时åˆ?t, 被观‹¹‹åˆ°çš„状态是随机的,但是˜q™ä¸ªéšæœºçŠ¶æ€æ˜¯ç”׃¸€ä¸ªç¡®å®šçš„函数控制的ã€?
          • 例如åQšæœ‰ 3 块金属放在箱子里面,ä»ÖM¸€ä¸ªæ—¶åˆ?t 取出的金属是随机的,但是每块金属衰退的速度是由˜q™å—金属自èín的函数控制的ã€?
          • 随机变量åˆÈ”»çš„是数值的随机性(某个数出现的概率åQ‰ï¼Œéšæœº˜q‡ç¨‹åˆÈ”»çš„是函数的随机性(某个函数出现的概率)
      • Markov ˜q‡ç¨‹
        • Markov 性或无后效性:˜q‡ç¨‹åQˆæˆ–¾pȝ»ŸåQ‰åœ¨æ—¶åˆ» t_0 所处的状态äؓ已知的条件下åQŒè¿‡½E‹åœ¨æ—¶åˆ» t>t_0 所处状态的条äšg分布与过½E‹åœ¨æ—¶åˆ» t_0 之前所处的状态无兟뀂即在已¾lçŸ¥é“过½E‹â€œçŽ°åœ¨â€çš„条äšg下,其“将来”不依赖于“过厠Z€ã€‚[盛骤åQ?015] C13
        • Markov ˜q‡ç¨‹åQšå…·æœ?Markov 性的随机˜q‡ç¨‹åQŒç§°ä¸?Markov ˜q‡ç¨‹ã€?
      • Markov é“?
        • 旉™—´å’ŒçŠ¶æ€éƒ½æ˜¯ç¦»æ•£çš„ Markov ˜q‡ç¨‹¿UîCؓ Markov 链,½Ž€¿U°é©¬æ°é“¾ã€?
        • 深入理解可参è€?[Rabiner, 1989]
      • HMM
        • 关于时序的概率模åž?
        • 用于描述一个被观测到的随机序列åQŒè¿™ä¸ªéšæœºåºåˆ—是ç”׃¸å¯è§‚‹¹‹çš„状态随机序列生成的åQŒè¿™ä¸ªçŠ¶æ€éšæœºåºåˆ—是由隐藏的 Markov é“ùNšæœºç”Ÿæˆçš„ã€?
          • 状态序åˆ?QåQšéšè—çš„ Markov é“ùNšæœºç”Ÿæˆçš„状态序列;
          • 观测序列 OåQšæ¯ä¸ªçŠ¶æ€ç”Ÿæˆä¸€ä¸ªè§‚‹¹‹ï¼Œä¸€ä¸ªçŠ¶æ€åºåˆ—就会生成一个观‹¹‹åºåˆ—ã€?
          • 序列的每一个位¾|®éƒ½å¯ä»¥çœ‹ä½œä¸€ä¸ªæ—¶åˆ…R€?
    • HMM 的基本假è®?
      • 齐次 Markov 假设åQŒå³å‡è®¾éšè—çš?Markov 铑֜¨ä»ÀL„æ—¶åˆ» t 的状态只依赖于前一个时åˆÈš„状态,而与其他时刻的状态及观测无关åQŒä¹Ÿä¸Žæ—¶åˆ?t 无关åQ?
      • 观测独立性假设,卛_‡è®¾ä“Q意时åˆ?t 的观‹¹‹åªä¾èµ–于该时刻çš?Markov 铄¡š„状态,与其他观‹¹‹ä¸ŽçŠ¶æ€æ— å…Ÿë€?
    • HMM 的基本元ç´?
      • NåQŒæ¨¡åž‹çš„状态数åQ?
      • MåQŒæ¯ä¸ªçŠ¶æ€ç”Ÿæˆçš„可观‹¹‹çš„标志敎ͼ›
      • AåQŒè{¿UÀL¦‚率矩阵,a_{ij} 表示从状æ€?i 转移到状æ€?j 的概率;
      • BåQŒè§‚‹¹‹æ¦‚率矩阵,b_{j} (k) 表示状æ€?j 产生标志 k 的概率;
      • πåQŒåˆå§‹çŠ¶æ€åˆ†å¸ƒï¼ŒÏ€_i 表示一开始系¾lŸåœ¨çŠ¶æ€?i 的概率ã€?
      • HMM 参数的数学表½Cºï¼šÎ»=(A, B, π)
    • HMM 的三个基本问é¢?
      • 概率计算问题
        • ¾l™å®šè§‚测序列 O 和模型参æ•?λåQŒè®¡½Ž—基于这个模型下观测序列出现的概çŽ?P(O|λ) åQ?
      • 预测问题
        • ¾l™å®šè§‚测序列 O 和模型参æ•?λåQŒå¯»æ‰¾èƒ½å¤Ÿè§£é‡Šè¿™ä¸ªè§‚‹¹‹åºåˆ—的状态序列,˜q™ä¸ªçŠ¶æ€åºåˆ—的可能性最大;
        • 除非是退化的模型åQŒå¦åˆ™ä¸ä¼šæœ‰â€œæ­£¼‹®â€çš„状态序列,因äؓ每个状态序列都有可以生成观‹¹‹åºåˆ—ï¼›
        • 只可能是依据某个优化准则åQŒä‹É扑ֈ°çš„状态序列尽可能的é€ÆD¿‘真实的状态序列ã€?
      • 学习问题
        • ¾l™å®šè§‚测序列 OåQŒå¯»æ‰¾èƒ½å¤Ÿè§£é‡Šè¿™ä¸ªè§‚‹¹‹åºåˆ—的模型参数 λåQŒä‹Éå¾?P(O|λ) 最大ã€?
        • 评测哪个模型能最好地解释观测序列ã€?
    • HMM 的三个基本问题的解决æ–ÒŽ¡ˆ
      • 概率计算问题åQšå‰å‘算法;
        • 先了解直接计½Ž—法åQŒç†è§?HMM 需要计½Ž—的概率的方法和目的åQŒåŒæ—¶æ˜Žç™½ç›´æŽ¥è®¡½Ž—法存在的问题;
        • 再了解前向算法,如果利用栅格æ–ÒŽ³•å åŠ å‰é¢è®¡ç®—的成果,从而降低直接计½Ž—法的庞大计½Ž—量ã€?
      • 预测问题åQšViterbi ½Ž—法åQ?
      • 学习问题åQšå‰å?+ 后向½Ž—法 +EM ½Ž—法ã€?
        • 利用前向 + 后向½Ž—法计算转移概率矩阵åQ?
        • 再基äº?MLE 理论构é€?P(O|λ) 函数åQ?
        • 因äؓ函数中有三个参数不可知,无法直接计算得到åQŒå› ä¸ºé‡‡ç”?EM ½Ž—法˜q­ä»£æ±‚解ã€?
    • HMM 的基本类åž?
      • 基本çš?HMM ¾cÕdž‹
        • 4 状态遍åŽ?HMMåQ›å…¶ä»–类型都是遍åŽ?HMM 的特例ã€?
        • 4 状态从左到å?HMMåQ?
        • 6 状态从左到叛_ƈ行èµ\å¾?HMMã€?
      • 观测序列的密度是˜qžç®‹å‡½æ•°çš?HMMåQšå¢žåŠ äº†æ··åˆé«˜æ–¯ä½œäؓ¾U¦æŸåQ?
      • 自回归的 HMMåQšå¾ˆé€‚合语音处理åQ?
      • 无输出的 HMMåQšå³æŸäº›çŠ¶æ€è{¿UÀL—¶æ— è§‚‹¹‹è¾“出,主要用于语音识别åQ?
      • 一¾l„状态到另一¾l„状态è{换:¾l„内状态无转移åQ?
      • 优化准则åQšåˆ©ç”¨æ¦‚率理论(MLåQ‰æˆ–信息理论åQˆMMIåQŒMDIåQ‰åˆ»ç”»ï¼›
      • 比较 HMM 模型åQšç”¨äºŽæ¨¡åž‹çš„‹¹‹åº¦å’Œé€‰æ‹©åQŒå¸¸ç”¨çš„‹¹‹åº¦åQˆäº¤å‰ç†µæˆ–散度或判别信息åQ?
    • HMM ½Ž—法的具体实现方æ³?
      • 观测数据的尺度化åQŒæ–¹ä¾¿è®¡½Ž—机处理åQŒé˜²æ­¢æº¢å‡ºï¼›
      • HMM 模型的训¾lƒï¼šé€šè¿‡å¤šä¸ªè§‚测序列˜q›è¡Œè®­ç»ƒåQŒä¼°è®¡æ¨¡åž‹çš„参数åQ?
      • HMM 模型参数的初始å€ÆD®¾å®šï¼Œæ²¡æœ‰å½¢å¼åŒ–方法,只能凭借经验;
      • 观测数据数量˜q‡å°‘åQŒæˆ–者观‹¹‹æ•°æ®ä¸å®Œæ•´
        • 扩大用于训练的观‹¹‹é›†çš„大ž®ï¼ˆçŽ°å®žä¸å¯æ“ä½œåQ‰ï¼›
        • 减少 HMM 模型的参æ•îC¸ªæ•ŽÍ¼Œå›_‡ž®?HMM 模型的规模;
        • 利用插值的æ–ÒŽ³•è¡¥é½æˆ–者增加数据ã€?
      • HMM 模型的选择
        • ¼‹®å®š HMM 模型的状态(模型状态数åQŒæ¨¡åž‹èµ\径数åQ?
        • ¼‹®å®š HMM 观测的标志(˜qžç®‹˜q˜æ˜¯¼›ÀL•£åQŒå•ä¸ªè¿˜æ˜¯æ؜合)
        • 无åŞ式化æ–ÒŽ³•åQŒä¾èµ–于具体的应用ã€?
    • 学习æ€È»“
      • 随机˜q‡ç¨‹å’?HMM ½Ž—法的基本概å¿ëŠš„理解åQŒç‰¹åˆ«æ˜¯è¯­éŸ³è¯†åˆ«å’Œè¯­­a€å¤„理方向的研½I¶æžä¸ºé‡è¦ï¼›
      • HMM ½Ž—法的计½Ž—过½E‹çš„了解åQŒè™½ç„¶å¯ä»¥è°ƒç”¨æˆç†Ÿçš„模块åQŒä½†æ˜¯äº†è§£è¿™ä¸ªè®¡½Ž—过½E‹å¯¹äº?HMM 计算的调优可能会有帮助;
      • HMM ½Ž—法的学习极力推è?[Rabiner, 1989]åQŒæœ¬ç« çš„框架ž®±æ˜¯åŸÞZºŽ˜q™ç¯‡æ–‡ç« å†™çš„ã€?

    C11. 条äšg随机场(CRFåQ‰çš„½Ž—法及推òq?/h1>
    • 条äšg随机场(Conditional Random Field, CRFåQ‰çš„基本概念
      • 概率模型
        • 提供了一¿Uæ˜q°æ¡†æžÓž¼Œž®†å­¦ä¹ ä“Q务归¾l“于计算变量的概率分布ã€?
        • 推断åQšåˆ©ç”¨å·²çŸ¥å˜é‡æŽ¨‹¹‹æœªçŸ¥å˜é‡çš„分布åQŒæ ¸å¿ƒæ˜¯å¦‚何åŸÞZºŽå¯è§‚‹¹‹å˜é‡æŽ¨‹¹‹å‡ºæœªçŸ¥å˜é‡çš„条件分布ã€?
      • 生成模型与判别模åž?
        • 生成 (generative) 模型
          • 考虑联合分布åQŒæ˜¯æ‰€æœ‰å˜é‡çš„全概率模型;
          • ç”ÞqŠ¶æ€åºåˆ—决定观‹¹‹åºåˆ—,因此可以模拟åQˆâ€œç”Ÿæˆâ€ï¼‰æ‰€æœ‰å˜é‡çš„倹{€?
          • å…ähœ‰ä¸¥æ ¼çš„独立性假设;
          • 特征是事先给定的åQŒåƈ且特征之间的关系直接体现在公式中ã€?
          • 优点
            • 处理单类问题比较灉|´»åQ?
            • 模型变量之间的关¾pÀL¯”较清楚;
            • 模型可以通过增量学习获得åQ?
            • 可以应用于数据不完整的情å†üc€?
          • ¾~ºç‚¹åQšæ¨¡åž‹çš„推导和学习比较复杂ã€?
          • 应用
            • n 元语法模åž?
            • HMM
            • Markov 随机åœ?
            • Naive Bayes 分类å™?
            • 概率上下文无å…Ïx–‡æ³?
        • 判别 (discriminative) 模型
          • 考虑条äšg分布åQŒè®¤ä¸ºç”±è§‚测序列军_®šçŠ¶æ€åºåˆ—,直接对后验概率徏模;
          • 从状态序列中提取特征åQŒå­¦ä¹ æ¨¡åž‹å‚敎ͼŒä½¿å¾—条äšg概率½W¦åˆä¸€å®šåŞ式的最优ã€?
          • 特征可以ä»ÀL„¾l™å®šåQŒä¸€èˆ¬åˆ©ç”¨å‡½æ•°è¿›è¡Œè¡¨½Cºã€?
          • 优点åQšæ¨¡åž‹ç®€å•ï¼Œå®ÒŽ˜“建立与学习;
          • ¾~ºç‚¹åQšæ˜q°èƒ½åŠ›æœ‰é™ï¼Œå˜é‡ä¹‹é—´çš„å…³¾pÖM¸æ¸…æ™°åQŒåªèƒ½åº”用于有监督学习ã€?
          • 应用
            • 最大熵模型
            • 条äšg随机åœ?
            • 最大熵 Markov 模型 (maximum-entropy Markov model, MEMM)
            • 感知æœ?
      • 概率图模型:是一¾cȝ”¨å›¾æ¥è¡¨è¾¾å˜é‡ç›¸å…³å…³ç³»çš„概率模型,
        • 有向图模型(Bayes ¾|‘)åQšä‹É用有向无环图表示变量间的依赖关系åQŒå¦‚åQšæŽ¨å¯¼å…³¾p?
          • 静æ€?Bayes ¾|‘络
          • 动æ€?Bayes ¾|‘络åQšé€‚合处理一般图问题
            • éš?Markov 模型åQšç»“构最½Ž€å•çš„动æ€?Bayes ¾|‘,适合处理¾U¿æ€§åºåˆ—问题,可用于时序数据徏模,主要应用领域ä¸ø™¯­éŸŒ™¯†åˆ«ã€è‡ªç„¶è¯­­a€å¤„理½{‰ã€?
        • 无向图模型(Markov ¾|‘)åQšä‹É用无向图表示变量间的依赖关系åQŒå¦‚åQšåó@环关¾p?
          • Markov 随机场:典型çš?Makrov ¾|?
          • Boltzman æœ?
          • 通用条äšg随机场:适合处理一般图问题
            • ¾U¿æ€§é“¾å¼æ¡ä»‰™šæœºåœºåQšé€‚合处理¾U¿æ€§åºåˆ—é—®é¢?
      • 随机场:
    • 概率图模åž?
      • 在概率模型的基础上,使用了基于图的方法来表示概率分布åQˆæˆ–者概率密度、密度函敎ͼ‰åQŒæ˜¯ä¸€¿Ué€šç”¨åŒ–的不确定性知识表½Cºå’Œå¤„理的方法ã€?
      • 图是表示工具
        • ¾l“点表示一个或者一¾l„随机变é‡?
        • ¾l“点之间的边表示变量间的概率依赖关系åQŒå³â€œå˜é‡å…³¾pÕd›¾â€ã€?
    • Bayes ¾|‘络åQˆä¿¡å¿ëŠ½‘åQŒä¿¡åº¦ç½‘åQŒç½®ä¿¡ç½‘åQ?
      • 目的åQšé€šè¿‡æ¦‚率推理处理不确定性和不完整性问é¢?
      • 构é€?Bayes ¾|‘络的主要问é¢?
        • 表示åQšåœ¨æŸä¸€éšæœºå˜é‡çš„集合上¾l™å‡ºå…¶è”合概率分布ã€?
        • 推断åQšå› ä¸ºæ¨¡åž‹å®Œæ•´æ˜qîCº†å˜é‡åŠå…¶å…³ç³»åQŒå¯ä»¥æŽ¨æ–­å˜é‡çš„各种问题ã€?
          • ¾_„¡¡®æŽ¨ç†æ–ÒŽ³•åQšå˜é‡æ¶ˆé™¤æ³•å’Œå›¢æ ‘法
          • ˜q‘似推理æ–ÒŽ³•åQšé‡è¦æ€§æŠ½æ äh³•ã€MCMC 模拟法、åó@环信念传播法和泛化信念传播法½{?
        • 学习åQšå†³å®šå˜é‡ä¹‹é—´ç›¸äº’关联的量化关系åQŒå³å‚¨å­˜å¼ºåº¦ä¼°è®¡ã€?
          • 参数学习常用æ–ÒŽ³•åQšMLE、MAP、EM å’?Bayes 估计法ã€?
          • ¾l“构学习åQ?
    • Markov 随机åœ?(Markov Random Field, MRF)
      • 定义
        • 是一¾l„有 Markov 性质的随机变量的联合概率分布模型åQ?
        • 联合概率分布满èƒö成对、局部和全局 Markov 性ã€?
        • ç”׃¸€ä¸ªæ— å‘图 G 和定ä¹?G 上的势函数组成ã€?
      • 基本概念
        • å›?(clique)åQšæ˜¯å›¾ä¸­¾l“点的一个子集,团内ä»ÀL„ä¸¤ä¸ª¾l“点都有边相˜qžã€‚也¿UîCؓ完全子图 (complete subgraph)ã€?
        • 极大å›?(maximal clique)åQšè‹¥åœ¨ä¸€ä¸ªå›¢ C 中加入ä“Q何一个结炚wƒ½ä¸å†å½¢æˆå›¢ï¼Œž®Þp¯´é‚£ä¸ªå›?C 是最大团。极大团ž®±æ˜¯ä¸èƒ½è¢«å…¶ä»–团所包含的团ã€?
        • 因子分解 (factorization)åQšå°†æ¦‚率无向图模型的联合概率分布表示为其最大团上的随机变量的函数的乘积形式的操作ã€?
        • 分离é›?(separating set)åQšè‹¥ä»Žç»“ç‚šw›† A 中的¾l“点到结炚w›† B 中的¾l“点都必™åȝ»˜q‡ç»“ç‚šw›† C 中的¾l“点åQŒåˆ™¿U°ç»“ç‚šw›† A å’?B 被结炚w›† C 所分离ã€?
        • 全局 Markov 性:¾l™å®šä¸¤ä¸ªå˜é‡å­é›†çš„分¼›»é›†åQŒåˆ™˜q™ä¸¤ä¸ªå˜é‡å­é›†æ¡ä»¶ç‹¬ç«?
          • 局éƒ?Markov 性:¾l™å®šæŸå˜é‡çš„é‚ÀLŽ¥å˜é‡åQŒåˆ™è¯¥å˜é‡ç‹¬ç«‹äºŽå…¶ä»–变量
          • 成对 Markov 性:¾l™å®šæ‰€æœ‰å…¶ä»–变量,两个非邻接变量条件独ç«?ã€?
        • 势函æ•?
          • 用于ž®†æ¨¡åž‹è¿›è¡Œå‚数化的参数化因子åQŒç§°ä¸ºå›¢åŠ¿èƒ½æˆ–者团势能函数åQŒç®€¿U°åŠ¿å‡½æ•°ã€?
          • 定义在变量子集上的非负实函数åQŒä¸»è¦ç”¨äºŽå®šä¹‰æ¦‚率分布函敎ͼŒäº¦ç§°â€œå› å­â€ã€?
          • 多个变量之间的联合概率可以基于团分解为多个因子的乘积ã€?
          • 指数函数¾lå¸¸è¢«ç”¨äºŽå®šä¹‰åŠ¿å‡½æ•°ã€?
    • 条äšg随机åœ?(Conditional Random Field, CRF)
      • 用来处理标注和划分序列结构数据的概率化结构模型ã€?
      • 是给定一¾l„输入随机变量条件下另一¾l„输出随机变量的条äšg概率分布模型
        • 假设输出随机变量构成 Makrov 随机场ã€?
      • ¾U¿æ€§é“¾æ¡äšg随机åœ?
        • 输入序列对输出序列预‹¹‹çš„判别模型
        • 形式为对数线性模åž?
      • 构é€?CRF 的主要问é¢?
        • 特征的选取
        • 参数训练
        • 解码
      • 优点åQšç›¸æ¯”于 HMM 没有独立性要求,相比于条ä»?Markov 模型没有标识偏置问题ã€?
    • 学习æ€È»“
      • 本书的描˜q°æ¦‚忉|€§å†…容过ž®‘,不利于理解,å»ø™®®é˜…读 [周志华,2018] C14
      • 以概率图模型为基¼‹€æ¥ç†è§£æ¡ä»‰™šæœºåœºä¼šæ›´åŠ å®¹æ˜“,也能够保证知识相互之间的联系åQŒè¿˜å¯ä»¥åŠ æ·±å¯?HMM 的理解ã€?
      • CRF 的主要应用是自然语言处理åQŒå› æ­¤ç»“合自然语­a€å¤„理来理解概念也会更加深刅R€?[宗成庆,2018] C06
      • 虽然国内几本书都写的不错åQŒä½†æ˜?CRF 都不是他们书中的重点åQŒè‹¥æƒÏx·±å…¥å­¦ä¹?CRF ˜q˜æ˜¯è¯·å‚è€?[Sutton, 2012]

    C12. ¾lŸè®¡å­¦ä¹ æ–ÒŽ³•æ€È»“

    10 ¿Uç»Ÿè®¡å­¦ä¹ æ–¹æ³•ç‰¹ç‚¹çš„概括æ€È»“

    æ–ÒŽ³• 适用问题 模型特点 模型¾cÕdž‹ 学习½{–ç•¥ 学习的损失函æ•?/strong> 学习½Ž—法
    感知æœ?/td> 二类分类 分离­‘…åã^é?/td> 判别模型 极小化误分点到超òq³é¢è·ç¦» 误分点到­‘…åã^面距¼›?/td> 随机梯度下降
    K ˜q‘é‚»æ³?/td> 多类分类åQŒå›žå½?/td> 特征½Iºé—´åQŒæ ·æœ¬ç‚¹ 判别模型 ____ ____ ____
    朴素贝叶æ–?/td> 多类分类 特征与类别的联合概率分布区,条äšg独立假设 生成模型 极大似然估计åQŒæžå¤§åŽéªŒæ¦‚率估è®?/td> å¯ÒŽ•°ä¼¼ç„¶æŸå¤± 概率计算公式åQŒEM ½Ž—法
    决策æ ?/td> 多类分类åQŒå›žå½?/td> 分类树,回归æ ?/td> 判别模型 正则化的极大似然估计 å¯ÒŽ•°ä¼¼ç„¶æŸå¤± 特征选择åQŒç”Ÿæˆï¼Œå‰ªæž
    逻辑斯蒂回归与最大熵模型 多类分类 特征条äšg下类别的条äšg概率分布åQŒå¯¹æ•°çº¿æ€§æ¨¡åž?/td> 判别模型 极大似然估计åQŒæ­£åˆ™åŒ–的极大似然估è®?/td> 逻辑斯蒂损失 改进的è„P代尺度算法,梯度下降åQŒæ‹Ÿç‰›é¡¿æ³?/td>
    支持向量æœ?/td> 二类分类 分离­‘…åã^面,核技å·?/td> 判别模型 极小化正则化的合™å‰|Ÿå¤±ï¼Œè½¯é—´éš”最大化 合页损失 序列最ž®æœ€ä¼˜åŒ–½Ž—法 (SMO)
    提升æ–ÒŽ³• 二类分类 弱分¾cÕd™¨çš„线形组å?/td> 判别模型 极小化加法模型的指数损失 指数损失 前向分布加法½Ž—法
    EM ½Ž—法 概率模型参数估计 含隐变量概率模型 ____ 极大似然估计åQŒæžå¤§åŽéªŒæ¦‚率估è®?/td> å¯ÒŽ•°ä¼¼ç„¶æŸå¤± ˜q­ä»£½Ž—法
    隐马ž®”可夫模åž?/td> 标注 观测序列与状态序列的联合概率分布模型 生成模型 极大似然估计åQŒæžå¤§åŽéªŒæ¦‚率估è®?/td> å¯ÒŽ•°ä¼¼ç„¶æŸå¤± 概率计算公式åQŒEM ½Ž—法
    条äšg随机åœ?/td> 标注 状态序列条件下观测序列的条件概率分布,å¯ÒŽ•°¾U¿æ€§æ¨¡åž?/td> 判别模型 极大似然估计åQŒæ­£åˆ™åŒ–极大似然估计 å¯ÒŽ•°ä¼¼ç„¶æŸå¤± 改进的è„P代尺度算法,梯度下降åQŒæ‹Ÿç‰›é¡¿æ³?/td>

  • [Borman, 2004] Borman S. The expectation maximization algorithm-a short tutorial [J]. Submitted for publication, 2004, 41.
  • [Charles, 2011] Charles Sutton and Andrew McCallum, An Introduction to Conditional Random Fields [J]. Machine Learning 4.4 (2011): 267-373.
  • [Determined22, 2017] Determined22, //www.cnblogs.com/Determined22/p/5776791.html , 2017.
  • [Duda, 2003] Duda R O, Peter E Hart, etc. 李宏东等译。模式分¾c?[M]. 机械工业出版½C¾ã€?003.
  • [Friedman, 2001] Friedman, Jerome H. “Greedy Function Approximation: A Gradient Boosting Machine.â€?Annals of Statistics, vol. 29, no. 5, 2001, pp. 1189â€?232.
  • [Friedman, 2001] Friedman J, Hastie T, Tibshirani R. The elements of statistical learning [M]. New York: Springer series in statistics, 2001.
  • [Goodfellow, 2017] Goodfellow I, Bengio Y, Courville A. 深度学习 [M]. 人民邮电出版½C¾ã€?017.
  • [Hagan, 2006] Martin T. Hagan. 戴葵½{‰è¯‘。神¾lç½‘¾lœè®¾è®?[M]. 2002.
  • [Haykin, 2011] Haykin S . ¼œžç»¾|‘络与机器学ä¹?[M]. 机械工业出版½C¾ã€?011.
  • [Hyvarinen, 2007] Aapo Hyvarinen, Juha Karhunen. 周宗潭译 独立成分分析 [M]. 电子工业出版½C¾ã€?007.
  • [Mitchell, 2003] Tom M.Mitchell. 肖华军等译。机器学ä¹?[M]. 机械工业出版½C¾ã€?003
  • [Rabiner, 1989] Rabiner L R. A tutorial on hidden Markov models and selected applications in speech recognition [J]. Proceedings of the IEEE, 1989, 77(2): 257-286.
  • [Samuel, 2007] Samuel Karlin M.Taylor 著,庄兴无等译ã€?随机˜q‡ç¨‹åˆçñ”教程ã€?[M]. 人民邮电出版½C¾ï¼Œ 2007.
  • [Sutton, 2012] Sutton, Charles, and Andrew McCallum. “An introduction to conditional random fields.â€?Foundations and Trends] in Machine Learning 4.4 (2012): 267-373.
  • [周志华,2018] 周志å?机器学习 [M]. 清华大学出版½C¾ã€?018
  • [苏剑林,2017] 苏剑林,https://spaces.ac.cn/archives/4277 , 2017.
  • [盛骤åQ?015] 盛骤½{‰ç¼–åQŒæ¦‚率论与数理统计(½W¬å››ç‰ˆï¼‰ã€?[M]. 高等教育出版½C¾ã€?2015.
  • [宗成庆,2018] 宗成庆著åQŒç»Ÿè®¡è‡ªç„¶è¯­­a€å¤„理åQˆç¬¬äºŒç‰ˆåQ‰ã€?[M]. 清华大学出版½C¾ã€?2018.
  • ½W¦å·è¯´æ˜Ž

    • PxxåQŒä»£è¡¨ç¬¬ xx ™åµï¼›
    • CxxåQŒä»£è¡¨ç¬¬ xx 章;
    • [M]åQŒä»£è¡¨å›¾ä¹¦ï¼›
    • [J]åQŒä»£è¡¨æ‚å¿—ï¼›


    ]]>¾~–码至高法则-高内聚低耦合 - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/GavinMiao/archive/2019/09/11/434613.htmlGavinMiaoGavinMiaoWed, 11 Sep 2019 07:59:00 GMT//www.lmlez.icu/GavinMiao/archive/2019/09/11/434613.html//www.lmlez.icu/GavinMiao/comments/434613.html//www.lmlez.icu/GavinMiao/archive/2019/09/11/434613.html#Feedback0//www.lmlez.icu/GavinMiao/comments/commentRss/434613.html//www.lmlez.icu/GavinMiao/services/trackbacks/434613.html阅读全文

    ]]>
    不äؓ人知的网¾lœç¼–½E?ä¹?åQšç†è®ø™”¾pÕd®žé™…,全方位深入理解DNS - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/09/09/434607.htmlJack JiangJack JiangMon, 09 Sep 2019 07:41:00 GMT//www.lmlez.icu/jb2011/archive/2019/09/09/434607.html//www.lmlez.icu/jb2011/comments/434607.html//www.lmlez.icu/jb2011/archive/2019/09/09/434607.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434607.html//www.lmlez.icu/jb2011/services/trackbacks/434607.html阅读全文

    ]]>
    知乎技术分享:知乎千万¾U§åƈ发的高性能长连接网å…ÏxŠ€æœ¯å®žè·?/title><link>//www.lmlez.icu/jb2011/archive/2019/09/05/434583.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Thu, 05 Sep 2019 04:04:00 GMT</pubDate><guid>//www.lmlez.icu/jb2011/archive/2019/09/05/434583.html</guid><wfw:comment>//www.lmlez.icu/jb2011/comments/434583.html</wfw:comment><comments>//www.lmlez.icu/jb2011/archive/2019/09/05/434583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>//www.lmlez.icu/jb2011/comments/commentRss/434583.html</wfw:commentRss><trackback:ping>//www.lmlez.icu/jb2011/services/trackbacks/434583.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">本文来自知乎官方技术团队的“知乎技术专æ ?#8221;åQŒæ„Ÿè°¢åŽŸä½œè€…faceair的无¿Uåˆ†äº«ã€?/p><h2 class="znkp">1、引­a€</h2><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">实时的响应æ€ÀL˜¯è®©äh兴奋的,ž®±å¦‚你在微信里看到对æ–ÒŽ­£åœ¨è¾“入,如你在王者åˆö谷里一呼百应,如你们在直播弹幕里不¾U¦è€ŒåŒçš?666åQŒå®ƒä»¬çš„背后都离不开长连接技术的加持ã€?br /><br />每个互联¾|‘公叔R‡Œå‡ ä¹Žéƒ½æœ‰ä¸€å¥—é•¿˜qžæŽ¥¾pȝ»ŸåQŒå®ƒä»¬è¢«åº”用在消息提醒、即旉™€šè®¯ã€æŽ¨é€ã€ç›´æ’­å¼¹òq•ã€æ¸¸æˆã€å…±äº«å®šä½ã€è‚¡¼œ¨è¡Œæƒ…ç­‰½{‰åœºæ™¯ã€‚而当公司发展åˆîC¸€å®šè§„模,业务场景变得更复杂后åQŒæ›´æœ‰å¯èƒ½æ˜¯å¤šä¸ªä¸šåŠ¡éƒ½éœ€è¦åŒæ—¶ä‹É用长˜qžæŽ¥¾pȝ»Ÿã€?br /><br />业务间分开设计长连接会å¯ÆD‡´ç ”发和维护成本陡增、浪费基¼‹€è®¾æ–½ã€å¢žåŠ å®¢æˆïL«¯è€—电、无法复用已有经验等½{‰é—®é¢˜ã€‚共享长˜qžæŽ¥¾pȝ»Ÿåˆéœ€è¦åè°ƒå¥½ä¸åŒ¾pȝ»Ÿé—´çš„认证、鉴权、数据隔¼›…R€åè®®æ‹“展、消息送达保证½{‰ç­‰éœ€æ±‚,˜q­ä»£˜q‡ç¨‹ä¸­åè®®éœ€è¦å‘前兼容,同时因äؓ不同业务的长˜qžæŽ¥æ±‡èšåˆîC¸€ä¸ªç³»¾lŸå¯¼è‡´å®¹é‡ç®¡ç†çš„éš‘Öº¦ä¹Ÿä¼šå¢žå¤§ã€?br /><br />¾lè¿‡äº†ä¸€òq´å¤šçš„开发和演进åQŒç»˜q‡æˆ‘们服务面向内和外的数ä¸?App、接入十几个需求和形态各异的长连接业务、数百万讑֤‡åŒæ—¶åœ¨çº¿ã€çªå‘大规模消息发送等½{‰åœºæ™¯çš„锤炼åQŒæˆ‘们提炼出一个长˜qžæŽ¥¾pȝ»Ÿ¾|‘关的通用解决æ–ÒŽ¡ˆåQŒè§£å†³äº†å¤šä¸šåŠ¡å…±ç”¨é•¿˜qžæŽ¥æ—‰™‡åˆ°çš„¿Uç§é—®é¢˜ã€?br /><br />知乎长连接网兌™‡´åŠ›äºŽä¸šåŠ¡æ•°æ®è§£è€¦ã€æ¶ˆæ¯é«˜æ•ˆåˆ†å‘、解军_®¹é‡é—®é¢˜ï¼ŒåŒæ—¶æä¾›ä¸€å®šç¨‹åº¦çš„消息可靠性保证ã€?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">åQˆæœ¬æ–‡åŒæ­¥å‘布于åQ?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">//www.52im.net/thread-2737-1-1.html</a>åQ?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103026371-229873408.jpg" alt="" style="border: 0px; max-width: 900px; height: auto;" /></p><h2 class="znkp">2、相å…Ïx–‡ç«?/h2><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Nettyòq²è´§åˆ†äínåQšäº¬ä¸œäº¬éº¦çš„生äñ”¾U§TCP¾|‘关技术实跉|€È»“</a>ã€?/li><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾lå¯¹òq²è´§åQšåŸºäºŽNetty实现‹¹·é‡æŽ¥å…¥çš„推送服务技术要ç‚?/a>ã€?/li><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">通俗易懂-深入理解TCP协议åQˆä¸‹åQ‰ï¼šRTT、滑动窗口、拥塞处ç?/a>ã€?/li><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(äº?åQšä¸Šä¸€ä¸?0òqß_¼Œè‘—名的C10Kòq¶å‘˜qžæŽ¥é—®é¢˜</a>ã€?/li><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(ä¸?åQšä¸‹ä¸€ä¸?0òqß_¼Œæ˜¯æ—¶å€™è€ƒè™‘C10Mòq¶å‘问题äº?/a>ã€?/li><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(å›?åQšä»ŽC10K到C10M高性能¾|‘络应用的理论探ç´?/a>ã€?/li><li style="list-style-type: disc;">ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">知乎技术分享:从单机到2000万QPSòq¶å‘çš„Redis高性能¾~“存实践之èµ\</a>ã€?/li></ul><h2 class="znkp">3、我们怎么设计通讯协议åQ?/h2><h3>3.1 业务解è€?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">支撑多业务的长连接网兛_®žé™…上是同时对接多客户端和多业务后端的åQŒæ˜¯å¤šå¯¹å¤šçš„关系åQŒä»–们之间只使用一条长˜qžæŽ¥é€šè®¯ã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103040357-1655797715.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /> <br /><br />˜q™ç§å¤šå¯¹å¤šçš„¾pȝ»Ÿåœ¨è®¾è®¡æ—¶è¦é¿å…å¼ºè€¦åˆã€‚业务方逻辑也是会动态调整的åQŒå¦‚果将业务的协议和逻辑与网兛_®žçŽ°è€¦åˆä¼šå¯¼è‡´æ‰€æœ‰çš„业务都会互相牵连åQŒåè®®å‡¾U§å’Œ¾l´æŠ¤éƒ½ä¼šå¼‚常困难ã€?br /><br />所以我们尝试ä‹É用经典的发布订阅模型来解耦长˜qžæŽ¥¾|‘关跟客æˆïL«¯ä¸Žä¸šåŠ¡åŽç«¯ï¼Œå®ƒä»¬ä¹‹é—´åªéœ€è¦çº¦å®?Topic 卛_¯è‡ªç”±äº’相发布订阅消息。传输的消息是纯二进制数据,¾|‘关也无需兛_¿ƒä¸šåŠ¡æ–¹çš„具体协议规范和序列化方式ã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103049357-160053151.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br /></p><h3>3.2 权限控制</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">我们使用发布订阅解耦了¾|‘关与业务方的实玎ͼŒæˆ‘们仍然需要控制客æˆïL«¯å¯?Topic 的发布订阅的权限åQŒé¿å…æœ‰æ„æˆ–无意的数据污染或­‘Šæƒè®‰K—®ã€?br /><br />假如讲师正在知乎 Live çš?165218 频道开è®ÔŒ¼Œå½“客æˆïL«¯˜q›å…¥æˆ‰K—´ž®è¯•è®¢é˜… 165218 频道çš?Topic 时就需要知ä¹?Live 的后端判断当前用æˆäh˜¯å¦å·²¾lä»˜è´V€‚è¿™¿Uæƒ…况下的权限实际上是很灉|´»çš„,当用户付费以后就能订阅,否则ž®×ƒ¸èƒ½è®¢é˜…。权限的状态只有知ä¹?Live 业务后端知晓åQŒç½‘å…Ïx— æ³•ç‹¬ç«‹ä½œå‡ºåˆ¤æ–­ã€?br /><br />所以我们在 ACL 规则中设计了åŸÞZºŽå›žè°ƒçš„鉴权机åˆÓž¼Œå¯ä»¥é…ç½® Live 相关 Topic 的订阅和发布动作都通过 HTTP 回调¾l?Live 的后端服务判断ã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103057351-1085715001.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />同时æ ÒŽ®æˆ‘们对内部业务的观察åQŒå¤§éƒ¨åˆ†åœºæ™¯ä¸‹ä¸šåŠ¡éœ€è¦çš„只是一个当前用æˆïLš„¿Uæœ‰ Topic 用来接收服务端下发的通知或消息,˜q™ç§æƒ…况下如果让业务都设计回调接口来判断权限会很¾Jçã€?br /><br />所以我们在 ACL 规则中设计了 Topic 模板变量来降低业务方的接入成本,我们¾l™ä¸šåŠ¡æ–¹é…ç½®å…è®¸è®¢é˜…çš?Topic 中包含连接的用户名变量标识,表示只允许用戯‚®¢é˜…或发送消息到自己çš?Topicã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103105380-395974873.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />此时¾|‘关可以在不跟业务方通信的情况下åQŒç‹¬ç«‹å¿«é€Ÿåˆ¤æ–­å®¢æˆïL«¯æ˜¯å¦æœ‰æƒé™è®¢é˜…或往 Topic 发送消息ã€?br /><br /></p><h3>3.3 消息可靠性保è¯?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />¾|‘关作äؓ消息传输的枢¾U½ï¼ŒåŒæ—¶å¯ÒŽŽ¥ä¸šåŠ¡åŽç«¯å’Œå®¢æˆïL«¯åQŒåœ¨è½¬å‘消息旉™œ€è¦ä¿è¯æ¶ˆæ¯åœ¨ä¼ è¾“˜q‡ç¨‹çš„可靠性ã€?br /><br />TCP 只能保证了传输过½E‹ä¸­çš„顺序和可靠性,但遇åˆ?TCP 状态异常、客æˆïL«¯æŽ¥æ”¶é€»è¾‘异常或发生了 Crash ½{‰ç­‰æƒ…况æ—Óž¼Œä¼ è¾“中的消息ž®×ƒ¼šå‘生丢失ã€?br /><br />ä¸ÞZº†ä¿è¯ä¸‹å‘或上行的消息被对端正常处理,我们实现了回执和重传的功能。重要业务的消息在客æˆïL«¯æ”¶åˆ°òq¶æ­£¼‹®å¤„理后需要发送回执,而网兛_†…暂时保存客户端未收取的消息,¾|‘关会判断客æˆïL«¯çš„接收情况åƈž®è¯•å†æ¬¡å‘送,直到正确收到了客æˆïL«¯çš„消息回执ã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103115360-819834136.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />而面å¯ÒŽœåŠ¡ç«¯ä¸šåŠ¡çš„大‹¹é‡åœºæ™¯åQŒæœåŠ¡ç«¯å‘ç»™¾|‘关的每条消息都发送回执的方式效率较低åQŒæˆ‘们也提供了基于消息队列的接收和发送方式,后面介绍发布订阅实现时再详细阐述ã€?br /><br />在设计通讯协议时我们参考了 MQTT 规范åQˆè¯¦è§ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">扫盲è´ß_¼šè®¤è¯†MQTT通信协议</a>》)åQŒæ‹“展了认证和鉴权设计,完成了业务消息的隔离与解耦,保证了一定程度的传输可靠性。同时保持了ä¸?MQTT 协议一定程度上兼容åQŒè¿™æ ·ä¾¿äºŽæˆ‘们直接ä‹Éç”?MQTT 的各端客æˆïL«¯å®žçŽ°åQŒé™ä½Žä¸šåŠ¡æ–¹æŽ¥å…¥æˆæœ¬ã€?/p><h2 class="znkp">4、我们怎么设计¾pȝ»Ÿæž¶æž„åQ?/h2><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">在设计项目整体架构时åQŒæˆ‘们优先考虑的是åQ?/p><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">1åQ‰å¯é æ€§ï¼›</li><li style="list-style-type: disc;">2åQ‰æ°´òqÏx‰©å±•èƒ½åŠ›ï¼›</li><li style="list-style-type: disc;">3åQ‰ä¾èµ–组件成熟度åQ?/li><li style="list-style-type: disc;">4åQ‰ç®€å•æ‰å€¼å¾—ä¿¡èµ–ã€?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />ä¸ÞZº†ä¿è¯å¯é æ€§ï¼Œæˆ‘们没有考虑像传¾lŸé•¿˜qžæŽ¥¾pȝ»Ÿé‚£æ ·ž®†å†…部数据存储、计½Ž—、消息èµ\ç”Þq­‰½{‰ç»„件全部集中到一个大的分布式¾pȝ»Ÿä¸­ç»´æŠ¤ï¼Œ˜q™æ ·å¢žå¤§¾pȝ»Ÿå®žçŽ°å’Œç»´æŠ¤çš„复杂度。我们尝试将˜q™å‡ éƒ¨åˆ†çš„组件独立出来,ž®†å­˜å‚¨ã€æ¶ˆæ¯èµ\ç”׃º¤¾l™ä¸“业的¾pȝ»Ÿå®ŒæˆåQŒè®©æ¯ä¸ª¾l„äšg的功能尽量单一且清晰ã€?br /><br />同时我们也需要快速地水åã^扩展能力。互联网场景下各¿Uè¥é”€‹zÕdŠ¨éƒ½å¯èƒ½å¯¼è‡´è¿žæŽ¥æ•°é™¡å¢žåQŒåŒæ—¶å‘布订阅模型系¾lŸä¸­ä¸‹å‘消息æ•îC¼šéšç€ Topic 的订阅者的个数¾U¿æ€§å¢žé•¿ï¼Œæ­¤æ—¶¾|‘关暂存的客æˆïL«¯æœªæŽ¥æ”¶æ¶ˆæ¯çš„存储压力也倍增。将各个¾l„äšg拆开后减ž®‘了˜q›ç¨‹å†…部状态,我们ž®±å¯ä»¥å°†æœåŠ¡éƒ¨çÖv到容器中åQŒåˆ©ç”¨å®¹å™¨æ¥å®Œæˆå¿«é€Ÿè€Œä¸”几乎无限制的水åã^扩展ã€?br /><br />最¾lˆè®¾è®¡çš„¾pȝ»Ÿæž¶æž„如下图:<br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103125367-385255514.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /> <br /><br />¾pȝ»Ÿä¸»è¦ç”±å››ä¸ªä¸»è¦ç»„件组成:</p><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">1åQ‰æŽ¥å…¥å±‚使用 OpenResty 实现åQŒè´Ÿè´£è¿žæŽ¥è´Ÿè½½å‡è¡¡å’Œä¼šè¯ä¿æŒåQ?/li><li style="list-style-type: disc;">2åQ‰é•¿˜qžæŽ¥ BrokeråQŒéƒ¨¾|²åœ¨å®¹å™¨ä¸­ï¼Œè´Ÿè´£åè®®è§£æžã€è®¤è¯ä¸Žé‰´æƒã€ä¼šè¯ã€å‘布订阅等逻辑åQ?/li><li style="list-style-type: disc;">3åQ‰Redis 存储åQŒæŒä¹…化会话数据åQ?/li><li style="list-style-type: disc;">4åQ‰Kafka 消息队列åQŒåˆ†å‘消息给 Broker 或业务方ã€?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />其中 Kafka å’?Redis 都是业界òq¿æ³›ä½¿ç”¨çš„基¼‹€¾l„äšgåQŒå®ƒä»¬åœ¨çŸ¥ä¹Žéƒ½å·²òq›_°åŒ–和容器åŒ?(详见åQšã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Redis at Zhihu</a>》、ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">知乎åŸÞZºŽ Kubernetes çš?Kafka òq›_°çš„设计和实现</a>ã€?åQŒå®ƒä»¬ä¹Ÿéƒ½èƒ½å®Œæˆåˆ†é’Ÿ¾U§å¿«é€Ÿæ‰©å®V€?/p><h2 class="znkp">5、我们如何构建长˜qžæŽ¥¾|‘å…³åQ?/h2><h3>5.1 接入å±?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><a target="_blank" style="color: #1d58d1; text-decoration-line: none;">OpenResty</a> æ˜¯ä¸šç•Œä‹É用非常广泛的支持 Lua çš?Nginx 拓展æ–ÒŽ¡ˆåQŒçµ‹zÀL€§ã€ç¨³å®šæ€§å’Œæ€§èƒ½éƒ½éžå¸æ€¼˜å¼‚,我们在接入层的方案选型上也考虑使用 OpenRestyã€?br /><br />接入层是最靠近用户的一侧,在这一层需要完成两件事åQ?/p><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">1åQ‰è´Ÿè½½å‡è¡¡ï¼Œä¿è¯å„é•¿˜qžæŽ¥ Broker 实例上连接数相对均衡åQ?/li><li style="list-style-type: disc;">2åQ‰ä¼šè¯ä¿æŒï¼Œå•ä¸ªå®¢æˆ·ç«¯æ¯‹Æ¡è¿žæŽ¥åˆ°åŒä¸€ä¸?BrokeråQŒç”¨æ¥æä¾›æ¶ˆæ¯ä¼ è¾“可靠性保证ã€?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />负蝲均衡其实有很多算法都能完成,不管是随æœø™¿˜æ˜¯å„¿U?Hash ½Ž—法都能比较好地实现åQŒéº»çƒ¦ä¸€äº›çš„是会话保持ã€?br /><br />常见的四层负载均衡策略是æ ÒŽ®˜qžæŽ¥æ¥æº IP ˜q›è¡Œä¸€è‡´æ€?HashåQŒåœ¨èŠ‚点æ•îC¸å˜çš„情况下这栯‚ƒ½ä¿è¯æ¯æ¬¡éƒ?Hash 到同一ä¸?Broker 中,甚至在节ç‚ÒŽ•°½Eå¾®æ”¹å˜æ—¶ä¹Ÿèƒ½å¤§æ¦‚率扑ֈ°ä¹‹å‰˜qžæŽ¥çš„节炏V€?br /><br />之前我们也ä‹É用过来源 IP Hash 的策略,主要有两个缺点:</p><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">1åQ‰åˆ†å¸ƒä¸å¤Ÿå‡åŒ€åQŒéƒ¨åˆ†æ¥æº?IP 是大型局域网 NAT 出口åQŒä¸Šé¢çš„˜qžæŽ¥æ•°å¤šåQŒå¯¼è‡?Broker 上连接数不均衡;</li><li style="list-style-type: disc;">2åQ‰ä¸èƒ½å‡†¼‹®æ ‡è¯†å®¢æˆïL«¯åQŒå½“¿UÕdŠ¨å®¢æˆ·ç«¯æŽ‰¾U¿åˆ‡æ¢ç½‘¾lœå°±å¯èƒ½æ— æ³•˜qžæŽ¥å›žåˆšæ‰çš„ Broker 了ã€?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />所以我们考虑七层的负载均衡,æ ÒŽ®å®¢æˆ·ç«¯çš„唯一标识来进行一致æ€?HashåQŒè¿™æ ·éšæœºæ€§æ›´å¥½ï¼ŒåŒæ—¶ä¹Ÿèƒ½ä¿è¯åœ¨ç½‘¾lœåˆ‡æ¢åŽä¹Ÿèƒ½æ­£ç¡®è·¯ç”±ã€‚常规的æ–ÒŽ³•æ˜¯éœ€è¦å®Œæ•´è§£æžé€šè®¯åè®®åQŒç„¶åŽæŒ‰åè®®çš„包˜q›è¡Œè½¬å‘åQŒè¿™æ ·å®žçŽ°çš„成本很高åQŒè€Œä¸”增加了协议解析出错的风险ã€?br /><br />最后我们选择利用 Nginx çš?preread 机制实现七层负蝲均衡åQŒå¯¹åŽé¢é•¿è¿žæŽ?Broker 的实现的侵入性小åQŒè€Œä¸”接入层的资源开销也小ã€?br /><br />Nginx 在接受连接时可以指定预读取连接的数据åˆ?preread buffer 中,我们通过解析 preread buffer 中的客户端发送的½W¬ä¸€ä¸ªæŠ¥æ–‡æå–客æˆïL«¯æ ‡è¯†åQŒå†ä½¿ç”¨˜q™ä¸ªå®¢æˆ·ç«¯æ ‡è¯†è¿›è¡Œä¸€è‡´æ€?Hash ž®±æ‹¿åˆîCº†å›ºå®šçš?Brokerã€?br /><br /></p><h3>5.2 发布与订é˜?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">我们引入了业界广泛ä‹É用的消息队列 Kafka 来作为内部消息传输的枢纽ã€?br /><br />前面提到了一些这么ä‹É用的原因åQ?/p><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">1åQ‰å‡ž®‘é•¿˜qžæŽ¥ Broker 内部状态,è®?Broker 可以无压力扩容;</li><li style="list-style-type: disc;">2åQ‰çŸ¥ä¹Žå†…部已òq›_°åŒ–,支持水åã^扩展ã€?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />˜q˜æœ‰ä¸€äº›åŽŸå› æ˜¯åQ?/p><ul style="margin-left: 30px; padding-left: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><li style="list-style-type: disc;">1åQ‰ä‹É用消息队列削峎ͼŒé¿å…½Hå‘性的上行或下行消息压垮系¾lŸï¼›</li><li style="list-style-type: disc;">2åQ‰ä¸šåŠ¡ç³»¾lŸä¸­å¤§é‡ä½¿ç”¨ Kafka 传输数据åQŒé™ä½Žä¸Žä¸šåŠ¡æ–¹å¯¹æŽ¥æˆæœ¬ã€?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><br />其中利用消息队列削峰好理解,下面我们看一下怎么利用 Kafka 与业务方更好地完成对接ã€?br /><br /></p><h3>5.3 发布</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">˜qžæŽ¥ Broker 会根据èµ\由配¾|®å°†æ¶ˆæ¯å‘布åˆ?Kafka TopicåQŒåŒæ—¶ä¹Ÿä¼šæ ¹æ®è®¢é˜…配¾|®åŽ»æ¶ˆè´¹ Kafka ž®†æ¶ˆæ¯ä¸‹å‘给订阅客户端ã€?br /><br />路由规则和订阅规则是分别配置的,那么可能会出现四¿Uæƒ…å†üc€?br /><br />情况一åQšæ¶ˆæ¯èµ\由到 Kafka TopicåQŒä½†ä¸æ¶ˆè´¹ï¼Œé€‚合数据上报的场景,如下图所½Cºã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103140367-1752495465.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />情况二:消息路由åˆ?Kafka TopicåQŒä¹Ÿè¢«æ¶ˆè´¹ï¼Œæ™®é€šçš„åÏx—¶é€šè®¯åœºæ™¯åQŒå¦‚下图所½Cºã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103148358-125849778.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />情况三:直接ä»?Kafka Topic 消费òq¶ä¸‹å‘,用于¾U¯ä¸‹å‘消息的场景åQŒå¦‚下图所½Cºã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103155351-1911548671.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />情况四:消息路由åˆîC¸€ä¸?TopicåQŒç„¶åŽä»Žå¦ä¸€ä¸?Topic 消费åQŒç”¨äºŽæ¶ˆæ¯éœ€è¦è¿‡æ»¤æˆ–者预处理的场景,如下图所½Cºã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103202380-2015982239.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />˜q™å¥—路由½{–略的设计灵‹zÀL€§éžå¸”R«˜åQŒå¯ä»¥è§£å†›_‡ ä¹Žæ‰€æœ‰çš„场景的消息èµ\由需求。同时因为发布订阅基äº?KafkaåQŒå¯ä»¥ä¿è¯åœ¨å¤„理大规模数据时的消息可靠性ã€?br /><br /></p><h3>5.4 订阅</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">当长˜qžæŽ¥ Broker ä»?Kafka Topic 中消费出消息后会查找本地的订阅关¾p»ï¼Œç„¶åŽž®†æ¶ˆæ¯åˆ†å‘到客户端会话ã€?br /><br />我们最开始直接ä‹Éç”?HashMap 存储客户端的订阅关系。当客户端订阅一ä¸?Topic 时我们就ž®†å®¢æˆïL«¯çš„会话对象放入以 Topic ä¸?Key 的订é˜?Map 中,当反查消息的订阅关系时直接用 Topic ä»?Map 上取值就行ã€?br /><br />因äؓ˜q™ä¸ªè®¢é˜…关系是共享对象,当订阅和取消订阅发生时就会有˜qžæŽ¥ž®è¯•æ“ä½œ˜q™ä¸ªå…׃ín对象。äؓ了避免åƈ发写我们¾l?HashMap 加了锁,但这个全局锁的冲突非常严重åQŒä¸¥é‡åª„响性能ã€?br /><br />最¾lˆæˆ‘们通过分片¾l†åŒ–了锁的粒度,分散了锁的冲½Hã€?br /><br />本地同时创徏数百ä¸?HashMapåQŒå½“需要在某个 Key 上存取数据前通过 Hash 和取模找到其中一ä¸?HashMap 然后˜q›è¡Œæ“ä½œåQŒè¿™æ ·å°†å…¨å±€é”åˆ†æ•£åˆ°äº†æ•°ç™¾ä¸ª HashMap 中,大大降低了操作冲½Hï¼Œä¹Ÿæå‡äº†æ•´ä½“的性能ã€?br /><br /></p><h3>5.5 会话持久åŒ?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">当消息被分发¾l™ä¼šè¯?Session 对象后,ç”?Session 来控制消息的下发ã€?br /><br />Session 会判断消息是否是重要 Topic 消息åQ?是的话将消息标记 QoS ½{‰çñ”ä¸?1åQŒåŒæ—¶å°†æ¶ˆæ¯å­˜å‚¨åˆ?Redis 的未接收消息队列åQŒåƈž®†æ¶ˆæ¯ä¸‹å‘给客户端。等到客æˆïL«¯å¯ÒŽ¶ˆæ¯çš„ ACK 后,再将未确认队列中的消息删除ã€?br /><br />有一些业界方案是在内存中¾l´æŠ¤äº†ä¸€ä¸ªåˆ—表,在扩å®ÒŽˆ–¾~©å®¹æ—¶è¿™éƒ¨åˆ†æ•°æ®æ²¡æ³•è·Ÿç€˜qç§»ã€‚也有部分业界方案是在长˜qžæŽ¥é›†ç¾¤ä¸­ç»´æŠ¤äº†ä¸€ä¸ªåˆ†å¸ƒå¼å†…存存储åQŒè¿™æ ·å®žçŽ°è“v来复杂度也会变高ã€?br /><br />我们ž®†æœª¼‹®è®¤æ¶ˆæ¯é˜Ÿåˆ—攑ֈ°äº†å¤–部持久化存储中,保证了单ä¸?Broker 宕机后,客户端重æ–îC¸Š¾U¿è¿žæŽ¥åˆ°å…¶ä»– Broker 也能恢复 Session 数据åQŒå‡ž®‘了扩容和羃容的负担ã€?br /><br /></p><h3>5.6 滑动½H—口</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">在发送消息时åQŒæ¯æ?QoS 1 的消息需要被¾lè¿‡ä¼ è¾“、客æˆïL«¯å¤„理、回ä¼?ACK 才能¼‹®è®¤ä¸‹å‘完成åQŒèµ\径耗时较长。如果消息量较大åQŒæ¯æ¡æ¶ˆæ¯éƒ½½{‰å¾…˜q™ä¹ˆé•¿çš„¼‹®è®¤æ‰èƒ½ä¸‹å‘下一条,下发通道带宽不能被充分利用ã€?br /><br />ä¸ÞZº†ä¿è¯å‘送的效率åQŒæˆ‘们参è€?TCP 的滑动窗口设计了òq¶è¡Œå‘送的机制åQˆè¯¦è§ï¼šã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">通俗易懂-深入理解TCP协议åQˆä¸‹åQ‰ï¼šRTT、滑动窗口、拥塞处ç?/a>》)。我们设¾|®ä¸€å®šçš„阈å€égؓ发送的滑动½H—口åQŒè¡¨½Cºé€šé“上可以同时有˜q™ä¹ˆå¤šæ¡æ¶ˆæ¯æ­£åœ¨ä¼ è¾“和被½{‰å¾…¼‹®è®¤ã€?br /><br /><img src="https://img2018.cnblogs.com/blog/848699/201909/848699-20190905103214369-2111774072.gif" alt="" style="border: 0px; max-width: 900px; height: auto;" /><br /><br />我们应用层设计的滑动½H—口è·?TCP 的滑动窗口实际上˜q˜æœ‰äº›å·®å¼‚ã€?br /><br />TCP 的滑动窗口内çš?IP 报文无法保证™åºåºåˆ°è¾¾åQŒè€Œæˆ‘们的通讯是基äº?TCP 的所以我们的滑动½H—口内的业务消息是顺序的åQŒåªæœ‰åœ¨˜qžæŽ¥çŠ¶æ€å¼‚常、客æˆïL«¯é€»è¾‘异常½{‰æƒ…况下才可能导致部分窗口内的消息äؕ序ã€?br /><br />因äؓ TCP 协议保证了消息的接收™åºåºåQŒæ‰€ä»¥æ­£å¸¸çš„发送过½E‹ä¸­ä¸éœ€è¦é’ˆå¯¹å•æ¡æ¶ˆæ¯è¿›è¡Œé‡è¯•ï¼Œåªæœ‰åœ¨å®¢æˆïL«¯é‡æ–°˜qžæŽ¥åŽæ‰å¯¹çª—口内的未¼‹®è®¤æ¶ˆæ¯é‡æ–°å‘送。消息的接收端同时会保留½H—口大小的缓冲区用来消息去重åQŒä¿è¯ä¸šåŠ¡æ–¹æŽ¥æ”¶åˆ°çš„消息不会重复ã€?br /><br />我们åŸÞZºŽ TCP 构徏的滑动窗口保证了消息的顺序性同时也极大提升传输的吞吐量ã€?/p><h2 class="znkp">6、写在最å?/h2><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">知乎长连接网关由基础架构¾l?(Infra) 开发和¾l´æŠ¤åQŒä¸»è¦èµA献者是<a target="_blank" style="color: #1d58d1; text-decoration-line: none;">@faceair</a>ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">@安江æ³?/a> ã€?br /><br />基础架构¾l„负责知乎的‹¹é‡å…¥å£å’Œå†…部基¼‹€è®¾æ–½å»ø™®¾åQŒå¯¹å¤–我们奋斗在直面‹¹·é‡‹¹é‡çš„çš„½W¬ä¸€æˆ˜çº¿åQŒå¯¹å†…我们äؓ所有的业务提供坚如¼‚çŸ³çš„基¼‹€è®¾æ–½åQŒç”¨æˆïLš„每一‹Æ¡è®¿é—®ã€æ¯ä¸€ä¸ªè¯·æ±‚、内¾|‘的每一‹Æ¡è°ƒç”¨éƒ½ä¸Žæˆ‘们的¾pȝ»Ÿæ¯æ¯ç›¸å…³ã€?/p><h2 class="znkp">附录åQšæ›´å¤šç½‘¾lœç¼–½E‹ç›¸å…Œ™µ„æ–?/h2><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">[1] ¾|‘络¾~–程基础资料åQ?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">TCP/IP详解</a> - <a target="_blank" style="color: #1d58d1; text-decoration-line: none;">½W?1ç«?#183;UDPåQšç”¨æˆäh•°æ®æŠ¥åè®®</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">TCP/IP详解</a> - <a target="_blank" style="color: #1d58d1; text-decoration-line: none;">½W?7ç«?#183;TCPåQšä¼ è¾“控制协è®?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">TCP/IP详解</a> - <a target="_blank" style="color: #1d58d1; text-decoration-line: none;">½W?8ç«?#183;TCP˜qžæŽ¥çš„徏立与¾lˆæ­¢</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">TCP/IP详解</a> - <a target="_blank" style="color: #1d58d1; text-decoration-line: none;">½W?1ç«?#183;TCP的超时与重传</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">技术往事:改变世界的TCP/IP协议åQˆçè´µå¤šå›¾ã€æ‰‹æœºæ…Žç‚¹ï¼‰</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">通俗易懂-深入理解TCP协议åQˆä¸ŠåQ‰ï¼šç†è®ºåŸºç¡€</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">通俗易懂-深入理解TCP协议åQˆä¸‹åQ‰ï¼šRTT、滑动窗口、拥塞处ç?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">理论¾lå…¸åQšTCP协议çš?‹Æ¡æ¡æ‰‹ä¸Ž4‹Æ¡æŒ¥æ‰‹è¿‡½E‹è¯¦è§?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">理论联系实际åQšWireshark抓包分析TCP 3‹Æ¡æ¡æ‰‹ã€?‹Æ¡æŒ¥æ‰‹è¿‡½E?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">计算机网¾lœé€šè®¯åè®®å…³ç³»å›¾ï¼ˆä¸­æ–‡çè—ç‰ˆï¼‰</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">UDP中一个包的大ž®æœ€å¤§èƒ½å¤šå¤§åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">P2P技术详è§?一)åQšNAT详解——详细原理、P2P½Ž€ä»?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">P2P技术详è§?äº?åQšP2P中的NAT½I¿è¶Š(打洞)æ–ÒŽ¡ˆè¯¦è§£</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">P2P技术详è§?ä¸?åQšP2P技术之STUN、TURN、ICE详解</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">通俗易懂åQšå¿«é€Ÿç†è§£P2P技术中的NAT½I‰K€åŽŸç?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(一)åQšå•å°æœåŠ¡å™¨òq¶å‘TCP˜qžæŽ¥æ•°åˆ°åº•å¯ä»¥æœ‰å¤šå°‘</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(äº?åQšä¸Šä¸€ä¸?0òqß_¼Œè‘—名的C10Kòq¶å‘˜qžæŽ¥é—®é¢˜</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(ä¸?åQšä¸‹ä¸€ä¸?0òqß_¼Œæ˜¯æ—¶å€™è€ƒè™‘C10Mòq¶å‘问题äº?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(å›?åQšä»ŽC10K到C10M高性能¾|‘络应用的理论探ç´?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(äº?åQšä¸€æ–‡è¯»æ‡‚高性能¾|‘络¾~–程中的I/O模型</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">高性能¾|‘络¾~–程(å…?åQšä¸€æ–‡è¯»æ‡‚高性能¾|‘络¾~–程中的¾U¿ç¨‹æ¨¡åž‹</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?一)åQšæµ…析TCP协议中的疑难杂症(上篇)</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?äº?åQšæµ…析TCP协议中的疑难杂症(下篇)</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?ä¸?åQšå…³é—­TCP˜qžæŽ¥æ—¶äؓ什么会TIME_WAIT、CLOSE_WAIT</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?å›?åQšæ·±å…¥ç ”½I¶åˆ†æžTCP的异常关é—?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?äº?åQšUDP的连接性和负蝲均衡</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?å…?åQšæ·±å…¥åœ°ç†è§£UDP协议òq¶ç”¨å¥½å®ƒ</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?ä¸?åQšå¦‚何让不可靠的UDP变的可靠åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">不äؓ人知的网¾lœç¼–½E?å…?åQšä»Žæ•°æ®ä¼ è¾“层深度解密HTTP</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(一)åQšå¿«é€Ÿç†è§£ç½‘¾lœé€šä¿¡åè®®åQˆä¸Š½‹‡ï¼‰</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(äº?åQšå¿«é€Ÿç†è§£ç½‘¾lœé€šä¿¡åè®®åQˆä¸‹½‹‡ï¼‰</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(ä¸?åQšå¿«é€Ÿç†è§£TCP协议一½‹‡å°±å¤?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(å›?åQšå¿«é€Ÿç†è§£TCP和UDP的差å¼?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(äº?åQšå¿«é€Ÿç†è§£äؓ什么说UDP有时比TCP更有优势</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(å…?åQšå²ä¸Šæœ€é€šä¿—的集¾U¿å™¨ã€äº¤æ¢æœºã€èµ\由器功能原理入门</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(ä¸?åQšæ·±å…¥æµ…出,全面理解HTTP协议</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(å…?åQšæ‰‹æŠŠæ‰‹æ•™ä½ å†™åŸºäºŽTCP的Socket长连æŽ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾|‘络¾~–程懒äh入门(ä¹?åQšé€šä¿—讲解åQŒæœ‰äº†IP地址åQŒäؓ何还要用MAC地址åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">技术扫ç›ÔŒ¼šæ–îC¸€ä»£åŸºäºŽUDP的低延时¾|‘络传输层协è®?#8212;—QUIC详解</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">让互联网更快åQšæ–°ä¸€ä»£QUIC协议在腾讯的技术实践分äº?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">çŽîC»£¿UÕdŠ¨ç«¯ç½‘¾lœçŸ­˜qžæŽ¥çš„优化手ŒD‰|€È»“åQšè¯·æ±‚速度、弱¾|‘适应、安全保éš?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">聊聊iOS中网¾lœç¼–½E‹é•¿˜qžæŽ¥çš„那些事</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¿UÕdŠ¨ç«¯IM开发者必è¯?一)åQšé€šä¿—易懂åQŒç†è§£ç§»åŠ¨ç½‘¾lœçš„“å¼?#8221;å’?#8220;æ…?#8221;</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¿UÕdŠ¨ç«¯IM开发者必è¯?äº?åQšå²ä¸Šæœ€å…¨ç§»åŠ¨å¼±¾|‘络优化æ–ÒŽ³•æ€È»“</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IPv6技术详解:基本概念、应用现状、技术实践(上篇åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IPv6技术详解:基本概念、应用现状、技术实践(下篇åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">从HTTP/0.9到HTTP/2åQšä¸€æ–‡è¯»æ‡‚HTTP协议的历史演变和设计思èµ\</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">脑残式网¾lœç¼–½E‹å…¥é—?一)åQšè·Ÿç€åŠ¨ç”»æ¥å­¦TCP三次握手和四‹Æ¡æŒ¥æ‰?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">脑残式网¾lœç¼–½E‹å…¥é—?äº?åQšæˆ‘们在è¯Õd†™Socketæ—Óž¼Œ½I¶ç«Ÿåœ¨è¯»å†™ä»€ä¹ˆï¼Ÿ</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">脑残式网¾lœç¼–½E‹å…¥é—?ä¸?åQšHTTP协议必知必会的一些知è¯?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">脑残式网¾lœç¼–½E‹å…¥é—?å›?åQšå¿«é€Ÿç†è§£HTTP/2的服务器推é€?Server Push)</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">脑残式网¾lœç¼–½E‹å…¥é—?äº?åQšæ¯å¤©éƒ½åœ¨ç”¨çš„Ping命ä×oåQŒå®ƒåˆ°åº•æ˜¯ä»€ä¹ˆï¼Ÿ</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">脑残式网¾lœç¼–½E‹å…¥é—?å…?åQšä»€ä¹ˆæ˜¯å…¬ç½‘IP和内¾|‘IPåQŸNAT转换又是什么鬼åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">以网游服务端的网¾lœæŽ¥å…¥å±‚设计ä¸ÞZ¾‹åQŒç†è§£å®žæ—‰™€šä¿¡çš„技术挑æˆ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">˜qˆå‘高阶åQšä¼˜¿U€Android½E‹åºå‘˜å¿…知必会的¾|‘络基础</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">全面了解¿UÕdŠ¨ç«¯DNS域名劫持½{‰æ‚症:技术原理、问题根源、解å†Ïx–¹æ¡ˆç­‰</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾ŸŽå›¾App的移动端DNS优化实践åQšHTTPSè¯äh±‚耗时减小˜q‘半</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Android½E‹åºå‘˜å¿…知必会的¾|‘络通信传输层协è®?#8212;—UDP和TCP</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?一)åQšé€šä¿¡äº¤æ¢æŠ€æœ¯çš„癑ֹ´å‘展å?ä¸?</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?äº?åQšé€šä¿¡äº¤æ¢æŠ€æœ¯çš„癑ֹ´å‘展å?ä¸?</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?ä¸?åQšå›½äººé€šä¿¡æ–¹å¼çš„百òq´å˜˜q?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?å›?åQšæ‰‹æœºçš„演进åQŒå²ä¸Šæœ€å…¨ç§»åŠ¨ç»ˆç«¯å‘展史</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?äº?åQ?Gåˆ?GåQ?0òq´ç§»åŠ¨é€šä¿¡æŠ€æœ¯æ¼”˜q›å²</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?å…?åQšç§»åŠ¨ç»ˆç«¯çš„接头äº?#8212;—“基站”技æœ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?ä¸?åQšç§»åŠ¨ç»ˆç«¯çš„千里é©?#8212;—“ç”늣æ³?#8221;</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?å…?åQšé›¶åŸºç¡€åQŒå²ä¸Šæœ€å¼?#8220;天线”原理扫盲</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?ä¹?åQšæ— ¾U‰K€šä¿¡¾|‘络的中æž?#8212;—“核心¾|?#8221;</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?å?åQšé›¶åŸºç¡€åQŒå²ä¸Šæœ€å¼?G技术扫ç›?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?十一)åQšäؓ什么WiFi信号差?一文即懂!</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?十二)åQšä¸Š¾|‘卡™å¿ï¼Ÿ¾|‘络掉线åQŸä¸€æ–‡å³æ‡‚!</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?十三)åQšäؓ什么手æœÞZ¿¡å·å·®åQŸä¸€æ–‡å³æ‡‚!</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?十四)åQšé«˜é“ä¸Šæ— çº¿ä¸Šç½‘有多难?一文即懂!</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">IM开发者的零基¼‹€é€šä¿¡æŠ€æœ¯å…¥é—?十五)åQšç†è§£å®šä½æŠ€æœ¯ï¼Œä¸€½‹‡å°±å¤?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">癑ֺ¦APP¿UÕdŠ¨ç«¯ç½‘¾lœæ·±åº¦ä¼˜åŒ–实践分äº?一)åQšDNS优化½‹?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">癑ֺ¦APP¿UÕdŠ¨ç«¯ç½‘¾lœæ·±åº¦ä¼˜åŒ–实践分äº?äº?åQšç½‘¾lœè¿žæŽ¥ä¼˜åŒ–篇</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">癑ֺ¦APP¿UÕdŠ¨ç«¯ç½‘¾lœæ·±åº¦ä¼˜åŒ–实践分äº?ä¸?åQšç§»åŠ¨ç«¯å¼Þq½‘优化½‹?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">技术大牛陈¼‹•çš„分äínåQšç”±‹¹…入深,¾|‘络¾~–程学习¾léªŒòq²è´§æ€È»“</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">可能会搞ç æ€½ çš„面试:你知道一个TCP˜qžæŽ¥ä¸Šèƒ½å‘è“v多少个HTTPè¯äh±‚吗?</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">知乎技术分享:知乎千万¾U§åƈ发的高性能长连接网å…ÏxŠ€æœ¯å®žè·?/a>ã€?br />>> <a target="_blank" style="color: #1d58d1; text-decoration-line: none;">更多同类文章 ……</a><br /><br />[2] NIO异步¾|‘络¾~–程资料åQ?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Javaæ–îC¸€ä»£ç½‘¾lœç¼–½E‹æ¨¡åž‹AIO原理及Linux¾pȝ»ŸAIO介绍</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">有关“ä¸ÞZ½•é€‰æ‹©Netty”çš?1个疑问及解答</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">开源NIO框架八卦——到底是先有MINA˜q˜æ˜¯å…ˆæœ‰Netty?</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">选Netty˜q˜æ˜¯MinaåQšæ·±å…¥ç ”½I¶ä¸Žå¯ÒŽ¯”åQˆä¸€åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">选Netty˜q˜æ˜¯MinaåQšæ·±å…¥ç ”½I¶ä¸Žå¯ÒŽ¯”åQˆäºŒåQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">NIO框架入门(一)åQšæœåŠ¡ç«¯åŸÞZºŽNetty4的UDP双向通信Demo演示</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">NIO框架入门(äº?åQšæœåŠ¡ç«¯åŸÞZºŽMINA2的UDP双向通信Demo演示</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">NIO框架入门(ä¸?åQšiOS与MINA2、Netty4的跨òq›_°UDP双向通信实战</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">NIO框架入门(å›?åQšAndroid与MINA2、Netty4的跨òq›_°UDP双向通信实战</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Netty 4.x学习åQˆä¸€åQ‰ï¼šByteBuf详解</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Netty 4.x学习åQˆäºŒåQ‰ï¼šChannel和Pipeline详解</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Netty 4.x学习åQˆä¸‰åQ‰ï¼š¾U¿ç¨‹æ¨¡åž‹è¯¦è§£</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Apache Mina框架高çñ”½‹‡ï¼ˆä¸€åQ‰ï¼šIoFilter详解</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Apache Mina框架高çñ”½‹‡ï¼ˆäºŒï¼‰åQšIoHandler详解</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">MINA2 ¾U¿ç¨‹åŽŸç†æ€È»“åQˆå«½Ž€å•æµ‹è¯•å®žä¾‹ï¼‰</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Apache MINA2.0 开发指南(中文版)[附äšg下蝲]</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">MINA、Netty的源代码åQˆåœ¨¾U‰K˜…è¯È‰ˆåQ‰å·²æ•´ç†å‘布</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">解决MINA数据传输中TCP的粘包、缺包问题(有源码)</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">解决Mina中多个同¾cÕdž‹Filter实例共存的问é¢?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">实践æ€È»“åQšNetty3.x升çñ”Netty4.x遇到的那些坑åQˆçº¿½E‹ç¯‡åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">实践æ€È»“åQšNetty3.x VS Netty4.x的线½E‹æ¨¡åž?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">详解Netty的安全性:原理介绍、代码演½Cºï¼ˆä¸Šç¯‡åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">详解Netty的安全性:原理介绍、代码演½Cºï¼ˆä¸‹ç¯‡åQ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">详解Netty的优雅退出机制和原理</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">NIO框架详解åQšNetty的高性能之道</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">TwitteråQšå¦‚何ä‹É用Netty 4来减ž®‘JVM的GC开销åQˆè¯‘文)</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">¾lå¯¹òq²è´§åQšåŸºäºŽNetty实现‹¹·é‡æŽ¥å…¥çš„推送服务技术要ç‚?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">Nettyòq²è´§åˆ†äínåQšäº¬ä¸œäº¬éº¦çš„生äñ”¾U§TCP¾|‘关技术实跉|€È»“</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">新手入门åQšç›®å‰äؓ止最透彻的的Netty高性能原理和框架架构解æž?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">写给初学者:Java高性能NIO框架Netty的学习方法和˜q›é˜¶½{–ç•¥</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">ž®‘啰嗦!一分钟带你è¯ÀL‡‚Java的NIO和经典IO的区åˆ?/a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">史上最强Java NIO入门åQšæ‹…心从入门到放弃的åQŒè¯·è¯»è¿™½‹‡ï¼</a>ã€?br />ã€?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">手把手教你用Netty实现¾|‘络通信½E‹åºçš„心è·Ïxœºåˆ¶ã€æ–­¾U‰K‡˜qžæœºåˆ?/a>ã€?br />>> <a target="_blank" style="color: #1d58d1; text-decoration-line: none;">更多同类文章 …</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">åQˆæœ¬æ–‡åŒæ­¥å‘布于åQ?a target="_blank" style="color: #1d58d1; text-decoration-line: none;">//www.52im.net/thread-2737-1-1.html</a>åQ?/p><img src ="//www.lmlez.icu/jb2011/aggbug/434583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.lmlez.icu/jb2011/" target="_blank">Jack Jiang</a> 2019-09-05 12:04 <a href="//www.lmlez.icu/jb2011/archive/2019/09/05/434583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web端即旉™€šè®¯åŸºç¡€çŸ¥è¯†è¡¥è¯¾åQšä¸€æ–‡æžæ‡‚跨域的所有问题! - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/09/02/434535.htmlJack JiangJack JiangMon, 02 Sep 2019 07:40:00 GMT//www.lmlez.icu/jb2011/archive/2019/09/02/434535.html//www.lmlez.icu/jb2011/comments/434535.html//www.lmlez.icu/jb2011/archive/2019/09/02/434535.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434535.html//www.lmlez.icu/jb2011/services/trackbacks/434535.html阅读全文

    ]]>
    一文读懂前端技术演˜q›ï¼šç›˜ç‚¹Web前端20òq´çš„技术变˜qå² - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/08/22/434487.htmlJack JiangJack JiangThu, 22 Aug 2019 10:05:00 GMT//www.lmlez.icu/jb2011/archive/2019/08/22/434487.html//www.lmlez.icu/jb2011/comments/434487.html//www.lmlez.icu/jb2011/archive/2019/08/22/434487.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434487.html//www.lmlez.icu/jb2011/services/trackbacks/434487.html阅读全文

    ]]>
    ¾|‘易云信技术分享:IM中的万äh¾Ÿ¤èŠæŠ€æœ¯æ–¹æ¡ˆå®žè·‰|€È»“ - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/08/14/434434.htmlJack JiangJack JiangWed, 14 Aug 2019 02:07:00 GMT//www.lmlez.icu/jb2011/archive/2019/08/14/434434.html//www.lmlez.icu/jb2011/comments/434434.html//www.lmlez.icu/jb2011/archive/2019/08/14/434434.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434434.html//www.lmlez.icu/jb2011/services/trackbacks/434434.html本文来自¾|‘易云信团队的技术分享,原创发表于网易云信公众号åQŒåŽŸæ–‡é“¾æŽ¥ï¼šmp.weixin.qq.com/s/LT2dASI7QVpcOVxDAsMeVgåQŒæ”¶å½•æ—¶æœ‰æ”¹åŠ¨ã€?/p>

    1、引­a€

    在不了解IM技术的人眼里,¾Ÿ¤èŠæ˜¯å†òq›_¸¸ä¸è¿‡çš„功能而已åQŒä¸‡äººç¾¤èŠï¼Ÿåº”该也不隑֮žçŽ°å§åQŸï¼

    ¼‹®å®žåQŒä»Žå‰ç«¯åŠŸèƒ½ç•Œé¢ä¸Šæ¥çœ‹ï¼Œ¾Ÿ¤èŠæ— éžž®±æ˜¯ä¸ªåó@环向¾Ÿ¤å‘˜å‘送消息的一对多聊天消息分发模式而已åQŒéš¾åœ¨ä½•å¤„?

    真实的情冉|˜¯åQŒç¾¤èŠæ˜¯IM¾pȝ»Ÿä¸­çš„高难度技术点之一。难在哪åQŸéš¾åœ¨æœåŠ¡ç«¯åQä»ŽæŸç§è§’度上说åQŒç¾¤èŠåŠŸèƒ½çš„架构设计和技术实现的品质åQŒå¯ä»¥ä»£è¡¨è¿™‹Æ¾IM软äšg的技术水òqŸë€?/p>

    ¾Ÿ¤èŠä»ŽåŽå°çš„技术实çŽîC¸Šè¯ß_¼Œè‡›_°‘有以下难点:

    1åQ‰å¦‚何高效地˜q›è¡Œå¤§é‡¾Ÿ¤å‘˜æ¶ˆæ¯çš„分发?

    2åQ‰å¦‚何高效地½Ž¡ç†¾Ÿ¤å‘˜çš„在¾U¿çŠ¶æ€ï¼Ÿ

    3åQ‰å¦‚何高效地è¯Õd–¾Ÿ¤å‘˜çš„在¾U¿çŠ¶æ€ï¼Ÿ

    4åQ‰é›†¾Ÿ¤ç³»¾lŸä¸­åQŒå¦‚何高效地保证¾Ÿ¤å‘˜æ¶ˆæ¯çš„准¼‹®é€è¾¾åQ?/p>

    5åQ‰ç¾¤èŠæ¶ˆæ¯è¯¥æ‰©æ•£å†™è¿˜æ˜¯æ‰©æ•£è¯»åQ?/p>

    6åQ‰å¦‚何保证大量群聊消息分发的情况下不影响单聊消息体验åQ?/p>

    7åQ‰å¦‚何应对大¾Ÿ¤çªå‘事件下的性能负蝲åQ?/p>

    .... ....

    目前åQŒå¸‚面上ä¸ÀLµçš„IM产品中,微信¾Ÿ¤æ˜¯500äºÞZ¸Šé™ï¼ŒQQ¾Ÿ¤æ˜¯3000äºÞZ¸Šé™ï¼ˆ3000人群是按òq´ä»˜è´¹å‡¾U§ï¼Œå¾ˆè´µåQŒä¸æ˜¯äؓ一般用户准备的åQ‰ã€‚一斚w¢åQŒä»Žäº§å“çš„定义上¾Ÿ¤æˆå‘˜æ•°é‡ä¸åº”过多,另一斚w¢åQŒæŠ€æœ¯æˆæœ¬ä¹Ÿæ˜¯ä¸ªä¸å¯å›žé¿çš„因素。万人群˜q™ç§­‘…大规模¾Ÿ¤çš„技术难度,更是隑ַ²æƒŒ™±¡ã€?/p>

    本文内容是网易云信团队äؓ了响应万人群聊功能需求,在设计实çŽîC¸‡äººç¾¤èŠæŠ€æœ¯æ–¹æ¡ˆä¸­æ€È»“的技术实践,借此æœÞZ¼šåˆ†äín¾l™å„IM开发者同行ã€?/p>

    åQˆæœ¬æ–‡åŒæ­¥å‘布于åQ?/span>//www.52im.net/thread-2707-1-1.htmlåQ?/span>

    学习交流åQ?/span>

    - åÏx—¶é€šè®¯/推送技术开发交‹¹?¾Ÿ¤ï¼š215477170[推荐]

    - ¿UÕdŠ¨ç«¯IM开发入门文章:ã€?a target="_blank" style="box-sizing: border-box; background-color: transparent; color: #3194d0; text-decoration-line: none; cursor: pointer;">新手入门一½‹‡å°±å¤Ÿï¼šä»Žé›¶å¼€å‘移动端IMã€?/p>

    2、概˜q?/h1>

    随着¿UÕdŠ¨äº’联¾|‘的发展åQŒå³æ—‰™€šè®¯æœåŠ¡è¢«å¹¿æ³›åº”用到各个行业åQŒå®¢æˆ·ä¸šåŠ¡å¿«é€Ÿå‘展,传统百äh或千äºÞZ¸Šé™çš„¾Ÿ¤èŠå·²ç»æ— æ³•æ»¡èƒö很多业务发展需求,因此¾|‘易云信IM推出万äh¾Ÿ¤æœåŠ¡ã€?/p>

    万äh¾Ÿ¤åœºæ™¯éœ€è¦è§£å†³ä»¥ä¸‹é—®é¢˜ï¼š

    1åQ‰æ¶ˆæ¯éœ€è¦æŒ‰1:9999的比例进行è{发投递,按常规消息处理流½E‹å°†äº§ç”Ÿå¤§é‡çš„子ä»ÕdŠ¡åQŒå¯¹¾pȝ»Ÿåžåé‡çš„要求极高åQ?/p>

    2åQ‰åœ¨å¾®æœåŠ¡ç³»¾lŸæž¶æž„下åQŒå¦‚果不采用一些优化方案,服务以及存储åQˆDB、缓存等åQ‰ä¹‹é—´çš„QPS和网¾lœæµé‡å°†éžå¸¸é«˜ï¼›

    3åQ‰ä»¥¾Ÿ¤äؓ单位的缓存(如群成员列表åQ‰å†…存存储开销较大åQˆå‡è®¾ä¸€ä¸ªæˆå‘?00ByteåQŒä¸‡äººç¾¤¾U?MBåQ‰ï¼›

    4åQ‰ç¾¤æˆå‘˜ç™Õd½•åŽéœ€è¦åŒæ­¥ç¾¤¼›Èº¿æ¶ˆæ¯åQŒæ™ºèƒ½æ‰‹æœÞZ¸ŠApp前后台切换äñ”生的较多ç™Õd½•åŒæ­¥æ¶ˆæ¯åè®®åQŒå› æ­¤éœ€è¦ä¼˜åŒ–消息同步方案ã€?/p>

    ä¸ÞZº†è§£å†³ä»¥ä¸Šé—®é¢˜åQŒä¸‡äººç¾¤æŠ€æœ¯æ–¹æ¡ˆé‡‡ç”¨äº†“聚合+分层/¾l?增量”的设计思èµ\åQ?/span>

    3、万人群消息的处理流½E?/h1>

    1åQ?/span>按群¾l´æŠ¤åœ¨çº¿¾Ÿ¤æˆå‘˜ä¿¡æ¯ï¼Œä¸»è¦åŒ…含两部分(可以理解ä¸ÞZ¸¤ä¸ªç¼“存集合)åQ?/p>

    a. ¾Ÿ¤æˆå‘˜åœ¨¾U¿ä¿¡æ¯ï¼šå³ç”¨æˆ·åœ¨¾U¿çŠ¶æ€å˜åŒ–(上线、下¾U¿ï¼‰æ—Óž¼Œæ›´æ–°ç›¸åº”¾Ÿ¤çš„在线状态信息(卛_Š¨æ€ç»´æŠ¤ç¾¤æœ‰å“ªäº›æˆå‘˜åœ¨¾U¿ï¼‰åQ?/p>

    b. 成员IM长连接信息:即用æˆäh–°ç™Õd½•æ—Óž¼Œæ›´æ–°ç”¨æˆ·çš„Link信息åQˆå³ç™Õd½•æ‰€åœ¨Link的地址信息åQŒæ¶ˆæ¯è{发时æ ÒŽ®Link地址路由消息åQ‰ã€?/p>

    2åQ?/span>IM Server收到¾Ÿ¤æ¶ˆæ¯åŽåQŒæŒ‰¾Ÿ¤IDž®†æ¶ˆæ¯èµ\由到“¾Ÿ¤æ¶ˆæ¯æœåŠ?#8221;模块åQ?/p>

    3åQ?/span>¾Ÿ¤æ¶ˆæ¯æ¨¡å—检查åƈ预处理消息内容,然后通过“¾Ÿ¤æˆå‘˜åœ¨¾U¿çŠ¶æ€?#8221;服务获取在线成员åQŒå®Œæˆæ¶ˆæ¯è{发的基础工作。äؓ了减ž®‘群消息模块和群在线成员服务之间的网¾lœæµé‡ï¼Œé‡‡ç”¨äº?#8220;本地¾~“å­˜+增量同步”的缓存策略,åÏxœ¬åœ°ç¼“存记录最后更新版本号和时间戳åQŒæ¯‹Æ¡åŒæ­¥ç¾¤åœ¨çº¿æˆå‘˜å‰å…ˆ‹‚€æŸ¥ç¼“存版本号是否有变æ›ß_¼Œè‹¥æœ‰åˆ™æŒ‰æœ€åŽæ›´æ–°æ—¶é—´å¢žé‡åŒæ­¥ï¼›

    4åQ?/span>通过“¾Ÿ¤æˆå‘˜åœ¨¾U¿æœåŠ?#8221;获取在线¾Ÿ¤æˆå‘˜çš„Link链接信息åQŒæŒ‰Link分组路由消息åQˆåˆ†¾l„èµ\ç”Þqš„原因åQšåŒä¸€Link上的全部¾Ÿ¤æˆå‘˜åªéœ€è¦èµ\ç”׃¸€æ¡æ¶ˆæ¯å³å¯ï¼‰ã€‚同样äؓ了减ž®‘网¾lœå¼€é”€åQŒæˆå‘˜Link信息也采ç”?#8220;本地¾~“å­˜+增量同步”的方案;

    5åQ?/span>¾Ÿ¤æ¶ˆæ¯é‡‡ç”?#8220;漫游+历史”的存储方案,漫游的消息存储在分布式缓存中åQŒåŽ†å²æ¶ˆæ¯å¼‚步写入HBase。用æˆïL™»å½•åŽå¯ä»¥é€šè¿‡æ¼«æ¸¸å¿«é€Ÿçš„获取到最新消息,òq¶å¯ä»¥é€šè¿‡æ‹‰å–历史查看更早的消息ã€?/p>

    4、万人群æ–ÒŽ¡ˆæœ¬åœ°¾~“存增量同步½{–ç•¥

    抛开¾Ÿ¤åœ¨¾U¿çŠ¶æ€ç®¡ç†é€»è¾‘åQŒç¾¤æˆå‘˜åœ¨çº¿çŠ¶æ€æœåŠ¡å¯ä»¥ç®€å•ç†è§£äؓ分布式集中缓存ã€?/p>

    增量同步技术方案如下:

    如上图所½Cºï¼š

    1åQ‰æ•°æ®ç¼“存是一个集合,其包含了多个¾~“存数据™å¹ï¼Œæ¯ä¸€ä¸ªæ•°æ®é¡¹å¸¦æœ‰æœ€åŽæ›´æ–°æ—¶é—´ä¿¡æ¯ï¼›å¦å¤–¾~“å­˜˜q˜æœ‰ä¸€ä¸ªä¸¥æ ¼é€’增的版本号åQ?/p>

    2åQ‰ç¼“存数据变æ›ß_¼ˆæ–°å¢žã€ä¿®æ”V€åˆ é™¤ï¼‰åŽï¼Œéœ€è¦å¢žåŠ ç‰ˆæœ¬å·åQ?/p>

    3åQ‰æœ¬åœ°çº¿½E‹é€šè¿‡¾~“å­˜½Ž¡ç†è¯Õd–数据æ—Óž¼Œ½Ž¡ç†æœåŠ¡å…ˆæ£€æŸ¥æœ¬åœ°ç‰ˆæœ¬å·å’Œåˆ†å¸ƒå¼¾~“存中的版本åäh˜¯å¦ä¸€è‡ß_¼Œè‹¥ä¸ä¸€è‡´åˆ™æŒ‰æœ¬åœ°æœ€æ–°æ—¶é—´æˆ³å¢žé‡åŒæ­¥æ–°æ•°æ®é¡¹åQŒåƈ更新本地的版本号和最后更新时é—ß_¼ˆä¸ÞZº†é¿å…åˆ†å¸ƒå¼é›†ä¸­ç¼“存中òq¶å‘写入å¯ÆD‡´çš„增量时间戳不可靠问题,增量更新时可以将本地记录的最后更新时间戳向前推移åQŒæ¯”如减ž®?0msåQ‰ï¼›

    4åQ‰äؓ避免本地多线½E‹åƈ发读取相同数据项å¯ÆD‡´òq¶å‘更新本地¾~“存的问题,可以按缓存数据合òq¶æ›´æ–°è¯·æ±‚,卌™§£å†›_ƈ发问题还可以减少¾|‘络开销åQ?/p>

    5åQ‰ç¼“存数据由大量数据™åҎž„成,ä¸ÞZº†é¿å…å•ä¸ª¾~“存数据太大åQŒå¯ä»¥å°†æ•°æ®™å¹ä¸­çš„属性业务场景精½Ž€åQˆå†·çƒ­åˆ†¼›»ï¼‰åQŒä½Žé¢‘次è¯Õd†™çš„属性额外缓存ã€?/p>

    5、万人群水åã^扩容æ–ÒŽ¡ˆ

    万äh¾Ÿ¤é‡‡ç”¨å¤§é‡æœ¬åœ°ç¼“存的æ–ÒŽ¡ˆè§£å†³æ¶ˆæ¯å¤„理性能和网¾lœæµé‡çš„问题åQŒå› æ­¤æœ¬åœ°å­˜å‚¨ç©ºé—´æˆäº†æ–¹æ¡ˆçš„瓉™¢ˆç‚V€‚因此我们设计了分组路由的技术方案ã€?/p>

    消息按群ID和èµ\ç”Þq­–略定向èµ\由到指定分组åQˆé›†¾Ÿ¤ï¼‰ä¸Šå¤„理,分组由多个计½Ž—节点组成,因此æ–ÒŽ¡ˆä¸Šå¯ä»¥åšåˆ°åˆ†¾l„内和分¾l„é—´çš„æ°´òqÏx‰©¾~©å®¹ã€?/p>

    6、作ä¸?#8220;äº?#8221;服务åQŒç½‘易云信是如何实现万äh¾Ÿ¤æ‰€éœ€çš„计½Ž—资源的åQ?/h1>

    ç”׃ºŽä¸‡äh¾Ÿ¤å¯¹è®¡ç®—和存储资源消耗比较高åQŒåœ¨å®žæ–½å’Œè¿¾l´æ–¹æ¡ˆä¸Šä¹Ÿæœ‰ä¸€å®šçš„ç‰ÒŽ®Šæ€§ï¼Œä¸ÞZº†ä¿è¯ä¸šåŠ¡çš„可靠性和½E›_®šæ€§ï¼Œ¾|‘易云信是将万äh大群的能力,仅提供给专属的云客户åQˆæ™®é€šå…¬æœ‰äº‘客户是无法ä‹É用的åQ‰ã€?/p>

    之所以能从èÊY¼‹¬äšg基础设施上äؓ万äh¾Ÿ¤æä¾›ä¿éšœï¼Œ¾|‘易云信的IM专有云必™åÕd…·å¤‡ä»¥ä¸‹èµ„源能力:

    1åQ‰éœ€è¦ä¸“属的独立计算资源åQšä¿æŒè®¡½Ž—资源独立,且资源冗余度比公有云高,且需要保证不会受到公有云上其他客户业务的影响åQ?/p>

    2åQ‰éœ€è¦ä¸“属的独立˜qç»´æœåŠ¡åQšä»Žè€Œæ ¹æ®å®¢æˆ·ä¸šåŠ¡åœºæ™¯åˆ¶å®šæœ€ä½³çš„业务监控、弹性扩宏V€æ•…障迁¿Uȝ­‰˜qç»´æ–ÒŽ¡ˆã€?/p>

    æ€ÖM¹‹åQŒä¸‡äººç¾¤èŠçš„实现åQŒè¿‡¼‹¬çš„技术方案设计和技术实现只是一斚w¢åQŒåŸº¼‹€è®¡ç®—设施资源和运¾l´èƒ½åŠ›ä¹Ÿæ˜¯ä¸å¯æˆ–¾~ºã€?/p>

    所以,从今以后åQŒä¸è¦éšéšä¾¿ä¾¿å°±å–Šä¸‡äººç¾¤èŠï¼Œç”šè‡³åä¸‡äººç¾¤èŠï¼Œ˜q™ä¸æ˜¯æƒ³å®žçŽ°ž®Þpƒ½å®žçŽ°çš„哦åQ?/p>

    附录åQšæ›´å¤šç¾¤èŠç›¸å…ÏxŠ€æœ¯æ–‡ç«?/h1>

    ã€?/span>快速裂变:见证微信强大后台架构ä»?åˆ?的演˜q›åŽ†½E‹ï¼ˆä¸€åQ?/a>ã€?/span>
    �/span>
    如何保证IM实时消息çš?#8220;时序æ€?#8221;ä¸?#8220;一致æ€?#8221;åQ?/a>ã€?/span>
    �/span>
    IM单聊和群聊中的在¾U¿çŠ¶æ€åŒæ­¥åº”该用“æŽ?#8221;˜q˜æ˜¯“æ‹?#8221;åQ?/a>ã€?/span>
    �/span>
    IM¾Ÿ¤èŠæ¶ˆæ¯å¦‚此复杂åQŒå¦‚何保证不丢不重?ã€?/span>
    ã€?/span>微信后台团队åQšå¾®ä¿¡åŽå°å¼‚步消息队列的优化升çñ”实践分äínã€?/span>
    ã€?/span>¿UÕdŠ¨ç«¯IM中大规模¾Ÿ¤æ¶ˆæ¯çš„推送如何保证效率、实时性?ã€?/span>
    ã€?/span>çŽîC»£IM¾pȝ»Ÿä¸­èŠå¤©æ¶ˆæ¯çš„同步和存储方案探è®?/a>ã€?/span>
    �/span>
    关于IMåÏx—¶é€šè®¯¾Ÿ¤èŠæ¶ˆæ¯çš„äؕ序问题讨è®?/a>ã€?/span>
    �/span>
    IM¾Ÿ¤èŠæ¶ˆæ¯çš„å·²è¯Õd›žæ‰§åŠŸèƒ½è¯¥æ€Žä¹ˆå®žçŽ°åQ?/a>ã€?/span>
    �/span>
    IM¾Ÿ¤èŠæ¶ˆæ¯½I¶ç«Ÿæ˜¯å­˜1ä»?åÏx‰©æ•£è¯»)˜q˜æ˜¯å­˜å¤šä»?åÏx‰©æ•£å†™)åQ?/a>ã€?/span>
    �/span>
    一套高可用、易伸羃、高òq¶å‘çš„IM¾Ÿ¤èŠã€å•èŠæž¶æž„方案设计实è·?/a>ã€?/span>
    �/span>
    [技术脑‹zž] 如果æŠ?4亿中国äh拉到一个微信群里技术上能实现吗åQ?/a>ã€?/span>
    �/span>
    IM¾Ÿ¤èŠæœºåˆ¶åQŒé™¤äº†åó@环去发消息还有什么方式?如何优化åQ?/a>ã€?/span>
    �/span>
    ¾|‘易云信技术分享:IM中的万äh¾Ÿ¤èŠæŠ€æœ¯æ–¹æ¡ˆå®žè·‰|€È»“ã€?/span>
    >> æ›´å¤šåŒç±»æ–‡ç«  ……

    åQˆæœ¬æ–‡åŒæ­¥å‘布于åQ?/span>//www.52im.net/thread-2707-1-1.htmlåQ?/span>



    ]]>一文读懂即旉™€šè®¯åº”用中的¾|‘络心蟩包机åˆÓž¼šä½œç”¨ã€åŽŸç†ã€å®žçŽ°æ€èµ\½{?/title><link>//www.lmlez.icu/jb2011/archive/2019/08/08/434394.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Thu, 08 Aug 2019 04:01:00 GMT</pubDate><guid>//www.lmlez.icu/jb2011/archive/2019/08/08/434394.html</guid><wfw:comment>//www.lmlez.icu/jb2011/comments/434394.html</wfw:comment><comments>//www.lmlez.icu/jb2011/archive/2019/08/08/434394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>//www.lmlez.icu/jb2011/comments/commentRss/434394.html</wfw:commentRss><trackback:ping>//www.lmlez.icu/jb2011/services/trackbacks/434394.html</trackback:ping><description><![CDATA[     摘要: 本文原文ç”׃½œè€?#8220;张小æ–?#8221;原创发布äº?#8220;高性能服务器开å?#8221;微信公众åøP¼ŒåŽŸé¢˜ã€Šå¿ƒè·›_Œ…机制设计详解》,åÏx—¶é€šè®¯¾|‘收录时有改动ã€?、引­a€ä¸€èˆ¬æ¥è¯ß_¼Œæ²¡æœ‰çœŸæ­£åŠ¨æ‰‹åšè¿‡¾|‘络通信应用的开发者,很难惌™±¡åÏx—¶é€šè®¯åº”用中的心蟩机制的作用。但不可否认åQŒä½œä¸ºå³æ—‰™€šè®¯åº”用åQŒå¿ƒè·Ïxœºåˆ¶æ˜¯å…¶ç½‘¾lœé€šä¿¡æŠ€æœ¯åº•å±‚中非常重要的一环,有没有心è·Ïxœºåˆ¶ã€å¿ƒè·Ïxœºåˆ¶çš„½Ž—法实现好坏åQŒéƒ½ž®†ç›´æŽ¥åª„响即旉™€šè®¯åº?..  <a href='//www.lmlez.icu/jb2011/archive/2019/08/08/434394.html'>阅读全文</a><img src ="//www.lmlez.icu/jb2011/aggbug/434394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.lmlez.icu/jb2011/" target="_blank">Jack Jiang</a> 2019-08-08 12:01 <a href="//www.lmlez.icu/jb2011/archive/2019/08/08/434394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可能会搞ç æ€½ çš„面试:你知道一个TCP˜qžæŽ¥ä¸Šèƒ½å‘è“v多少个HTTPè¯äh±‚吗? - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/08/02/434332.htmlJack JiangJack JiangFri, 02 Aug 2019 01:55:00 GMT//www.lmlez.icu/jb2011/archive/2019/08/02/434332.html//www.lmlez.icu/jb2011/comments/434332.html//www.lmlez.icu/jb2011/archive/2019/08/02/434332.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434332.html//www.lmlez.icu/jb2011/services/trackbacks/434332.html阅读全文

    ]]>
    癑ֺ¦APP¿UÕdŠ¨ç«¯ç½‘¾lœæ·±åº¦ä¼˜åŒ–实践分äº?ä¸?åQšç§»åŠ¨ç«¯å¼Þq½‘优化½‹?/title><link>//www.lmlez.icu/jb2011/archive/2019/07/29/434316.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Mon, 29 Jul 2019 02:29:00 GMT</pubDate><guid>//www.lmlez.icu/jb2011/archive/2019/07/29/434316.html</guid><wfw:comment>//www.lmlez.icu/jb2011/comments/434316.html</wfw:comment><comments>//www.lmlez.icu/jb2011/archive/2019/07/29/434316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>//www.lmlez.icu/jb2011/comments/commentRss/434316.html</wfw:commentRss><trackback:ping>//www.lmlez.icu/jb2011/services/trackbacks/434316.html</trackback:ping><description><![CDATA[     摘要: 本文ç”Þq™¾åº¦æŠ€æœ¯å›¢é˜?#8220;蔡锐”原创发表äº?#8220;癑ֺ¦App技æœ?#8221;公众åøP¼ŒåŽŸé¢˜ä¸ºã€Šç™¾åº¦App¾|‘络深度优化¾pÕdˆ—《三》弱¾|‘优化》,感谢原作者的无私分äín。一、前­a€¾|‘络优化解决的核心问题有三个åQŒç¬¬ä¸€æ˜¯å®‰å…¨é—®é¢˜ï¼Œæˆ‘们在《百度APP¿UÕdŠ¨ç«¯ç½‘¾lœæ·±åº¦ä¼˜åŒ–实践分äº?一)åQšDNS优化½‹‡ã€‹è¿›è¡Œäº†è¯¦ç»†çš„讲解。第二是速度问题åQŒæˆ‘们在《百度APP¿UÕdŠ¨ç«¯ç½‘¾lœæ·±åº¦ä¼˜åŒ–实践分äº?äº?åQšç½‘¾lœè¿žæŽ¥ä¼˜...  <a href='//www.lmlez.icu/jb2011/archive/2019/07/29/434316.html'>阅读全文</a><img src ="//www.lmlez.icu/jb2011/aggbug/434316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.lmlez.icu/jb2011/" target="_blank">Jack Jiang</a> 2019-07-29 10:29 <a href="//www.lmlez.icu/jb2011/archive/2019/07/29/434316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从游击队到正规军åQšé©¬èœ‚窝旅游¾|‘çš„IM¾pȝ»Ÿæž¶æž„演进之èµ\ - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/07/24/434292.htmlJack JiangJack JiangWed, 24 Jul 2019 13:44:00 GMT//www.lmlez.icu/jb2011/archive/2019/07/24/434292.html//www.lmlez.icu/jb2011/comments/434292.html//www.lmlez.icu/jb2011/archive/2019/07/24/434292.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434292.html//www.lmlez.icu/jb2011/services/trackbacks/434292.html阅读全文

    ]]>
    自已开发IM有那么难吗?手把手教你自æ’怸€ä¸ªAndriod版简易IM (有源ç ? - 4399Èý¹úɱol¹ÙÍø|Èý¹úɱ´«ÆæÎ佫//www.lmlez.icu/jb2011/archive/2019/07/22/434271.htmlJack JiangJack JiangMon, 22 Jul 2019 04:48:00 GMT//www.lmlez.icu/jb2011/archive/2019/07/22/434271.html//www.lmlez.icu/jb2011/comments/434271.html//www.lmlez.icu/jb2011/archive/2019/07/22/434271.html#Feedback0//www.lmlez.icu/jb2011/comments/commentRss/434271.html//www.lmlez.icu/jb2011/services/trackbacks/434271.html阅读全文

    ]]>