[{"data":1,"prerenderedAt":823},["ShallowReactive",2],{"article-\u002Fai-drug-week05-morgan-mlp":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":5,"title":7,"description":8,"date":9,"tags":10,"listed":14,"body":15,"_type":817,"_id":818,"_source":819,"_file":820,"_stem":821,"_extension":822},"\u002Farticles\u002F\u002Fai-drug-week05-morgan-mlp","",false,"第 5 周：Morgan Fingerprint 和 MLP 的第一次模型对比","记录用 Morgan Fingerprint 训练 MLP，并和第 4 周 RandomForest baseline 做 ESOL 水溶解度预测对比。","2026-06-03",[11,12,13],"AI制药","深度学习","人工智能",true,{"type":16,"children":17,"toc":807},"root",[18,26,32,192,197,202,207,212,217,288,293,300,305,328,333,338,344,349,419,462,482,488,493,507,512,567,586,591,625,630,635,640,653,658,743,748,753,758,763,768,773,796,801],{"type":19,"tag":20,"props":21,"children":23},"element","h2",{"id":22},"前情提要",[24],{"type":25,"value":22},"text",{"type":19,"tag":27,"props":28,"children":29},"p",{},[30],{"type":25,"value":31},"正在做一个AI制药平台项目，前端使用vue3、后端采用双后端(主后端Java、SpringBoot做业务，次后端Python、FastAPI做AI服务)",{"type":19,"tag":33,"props":34,"children":38},"pre",{"className":35,"code":36,"language":37,"meta":5,"style":5},"language-plain shiki shiki-themes github-dark","Vue3 前端\n  |\n  | REST API\n  v\nSpringBoot 主后端\n  |\n  | 任务管理 \u002F 数据管理\n  v\nPostgreSQL + Redis\n  |\n  | 调用\n  v\nPython AI Service\n  |\n  | RDKit \u002F PyTorch \u002F PyG \u002F scikit-learn\n  v\n模型推理与分子计算\n","plain",[39],{"type":19,"tag":40,"props":41,"children":42},"code",{"__ignoreMap":5},[43,54,63,72,81,90,98,107,115,124,132,141,149,158,166,175,183],{"type":19,"tag":44,"props":45,"children":48},"span",{"class":46,"line":47},"line",1,[49],{"type":19,"tag":44,"props":50,"children":51},{},[52],{"type":25,"value":53},"Vue3 前端\n",{"type":19,"tag":44,"props":55,"children":57},{"class":46,"line":56},2,[58],{"type":19,"tag":44,"props":59,"children":60},{},[61],{"type":25,"value":62},"  |\n",{"type":19,"tag":44,"props":64,"children":66},{"class":46,"line":65},3,[67],{"type":19,"tag":44,"props":68,"children":69},{},[70],{"type":25,"value":71},"  | REST API\n",{"type":19,"tag":44,"props":73,"children":75},{"class":46,"line":74},4,[76],{"type":19,"tag":44,"props":77,"children":78},{},[79],{"type":25,"value":80},"  v\n",{"type":19,"tag":44,"props":82,"children":84},{"class":46,"line":83},5,[85],{"type":19,"tag":44,"props":86,"children":87},{},[88],{"type":25,"value":89},"SpringBoot 主后端\n",{"type":19,"tag":44,"props":91,"children":93},{"class":46,"line":92},6,[94],{"type":19,"tag":44,"props":95,"children":96},{},[97],{"type":25,"value":62},{"type":19,"tag":44,"props":99,"children":101},{"class":46,"line":100},7,[102],{"type":19,"tag":44,"props":103,"children":104},{},[105],{"type":25,"value":106},"  | 任务管理 \u002F 数据管理\n",{"type":19,"tag":44,"props":108,"children":110},{"class":46,"line":109},8,[111],{"type":19,"tag":44,"props":112,"children":113},{},[114],{"type":25,"value":80},{"type":19,"tag":44,"props":116,"children":118},{"class":46,"line":117},9,[119],{"type":19,"tag":44,"props":120,"children":121},{},[122],{"type":25,"value":123},"PostgreSQL + Redis\n",{"type":19,"tag":44,"props":125,"children":127},{"class":46,"line":126},10,[128],{"type":19,"tag":44,"props":129,"children":130},{},[131],{"type":25,"value":62},{"type":19,"tag":44,"props":133,"children":135},{"class":46,"line":134},11,[136],{"type":19,"tag":44,"props":137,"children":138},{},[139],{"type":25,"value":140},"  | 调用\n",{"type":19,"tag":44,"props":142,"children":144},{"class":46,"line":143},12,[145],{"type":19,"tag":44,"props":146,"children":147},{},[148],{"type":25,"value":80},{"type":19,"tag":44,"props":150,"children":152},{"class":46,"line":151},13,[153],{"type":19,"tag":44,"props":154,"children":155},{},[156],{"type":25,"value":157},"Python AI Service\n",{"type":19,"tag":44,"props":159,"children":161},{"class":46,"line":160},14,[162],{"type":19,"tag":44,"props":163,"children":164},{},[165],{"type":25,"value":62},{"type":19,"tag":44,"props":167,"children":169},{"class":46,"line":168},15,[170],{"type":19,"tag":44,"props":171,"children":172},{},[173],{"type":25,"value":174},"  | RDKit \u002F PyTorch \u002F PyG \u002F scikit-learn\n",{"type":19,"tag":44,"props":176,"children":178},{"class":46,"line":177},16,[179],{"type":19,"tag":44,"props":180,"children":181},{},[182],{"type":25,"value":80},{"type":19,"tag":44,"props":184,"children":186},{"class":46,"line":185},17,[187],{"type":19,"tag":44,"props":188,"children":189},{},[190],{"type":25,"value":191},"模型推理与分子计算\n",{"type":19,"tag":27,"props":193,"children":194},{},[195],{"type":25,"value":196},"会把自己认为比较重要的部分，单独写成文章以便记录。写这个项目的主要目的是在干中学，因为不想从头到尾啃生物信息学、生物化学原理这些AI制药理论。通过项目能快速理解核心概念，剩下零零散散的后续慢慢补。",{"type":19,"tag":27,"props":198,"children":199},{},[200],{"type":25,"value":201},"此篇就是第 5 周的记录。",{"type":19,"tag":20,"props":203,"children":205},{"id":204},"第-5-周morgan-fingerprint-和-mlp-的第一次模型对比",[206],{"type":25,"value":7},{"type":19,"tag":27,"props":208,"children":209},{},[210],{"type":25,"value":211},"第 5 周的重点是把 PyTorch 训练流程接进分子预测任务。输入特征从上一周的 RDKit descriptors 换成 Morgan Fingerprint，模型从 RandomForest 换成 MLP。",{"type":19,"tag":27,"props":213,"children":214},{},[215],{"type":25,"value":216},"这周跑通的链路是：",{"type":19,"tag":33,"props":218,"children":220},{"className":35,"code":219,"language":37,"meta":5,"style":5},"ESOL CSV\n-> SMILES\n-> Morgan Fingerprint\n-> Dataset \u002F DataLoader\n-> MLP\n-> loss curve\n-> metrics\n-> model checkpoint\n",[221],{"type":19,"tag":40,"props":222,"children":223},{"__ignoreMap":5},[224,232,240,248,256,264,272,280],{"type":19,"tag":44,"props":225,"children":226},{"class":46,"line":47},[227],{"type":19,"tag":44,"props":228,"children":229},{},[230],{"type":25,"value":231},"ESOL CSV\n",{"type":19,"tag":44,"props":233,"children":234},{"class":46,"line":56},[235],{"type":19,"tag":44,"props":236,"children":237},{},[238],{"type":25,"value":239},"-> SMILES\n",{"type":19,"tag":44,"props":241,"children":242},{"class":46,"line":65},[243],{"type":19,"tag":44,"props":244,"children":245},{},[246],{"type":25,"value":247},"-> Morgan Fingerprint\n",{"type":19,"tag":44,"props":249,"children":250},{"class":46,"line":74},[251],{"type":19,"tag":44,"props":252,"children":253},{},[254],{"type":25,"value":255},"-> Dataset \u002F DataLoader\n",{"type":19,"tag":44,"props":257,"children":258},{"class":46,"line":83},[259],{"type":19,"tag":44,"props":260,"children":261},{},[262],{"type":25,"value":263},"-> MLP\n",{"type":19,"tag":44,"props":265,"children":266},{"class":46,"line":92},[267],{"type":19,"tag":44,"props":268,"children":269},{},[270],{"type":25,"value":271},"-> loss curve\n",{"type":19,"tag":44,"props":273,"children":274},{"class":46,"line":100},[275],{"type":19,"tag":44,"props":276,"children":277},{},[278],{"type":25,"value":279},"-> metrics\n",{"type":19,"tag":44,"props":281,"children":282},{"class":46,"line":109},[283],{"type":19,"tag":44,"props":284,"children":285},{},[286],{"type":25,"value":287},"-> model checkpoint\n",{"type":19,"tag":27,"props":289,"children":290},{},[291],{"type":25,"value":292},"它看起来比第 4 周复杂很多，但最后的结果反而提醒我：复杂模型不一定自动带来更好的效果。",{"type":19,"tag":294,"props":295,"children":297},"h3",{"id":296},"morgan-fingerprint-作为输入",[298],{"type":25,"value":299},"Morgan Fingerprint 作为输入",{"type":19,"tag":27,"props":301,"children":302},{},[303],{"type":25,"value":304},"Morgan Fingerprint 可以理解成一种固定长度的分子结构编码。它把分子局部结构转成 bit vector，常见配置是：",{"type":19,"tag":33,"props":306,"children":308},{"className":35,"code":307,"language":37,"meta":5,"style":5},"radius = 2\nn_bits = 2048\n",[309],{"type":19,"tag":40,"props":310,"children":311},{"__ignoreMap":5},[312,320],{"type":19,"tag":44,"props":313,"children":314},{"class":46,"line":47},[315],{"type":19,"tag":44,"props":316,"children":317},{},[318],{"type":25,"value":319},"radius = 2\n",{"type":19,"tag":44,"props":321,"children":322},{"class":46,"line":56},[323],{"type":19,"tag":44,"props":324,"children":325},{},[326],{"type":25,"value":327},"n_bits = 2048\n",{"type":19,"tag":27,"props":329,"children":330},{},[331],{"type":25,"value":332},"相比 RDKit descriptors，fingerprint 的维度更高，也更像“结构模式”的集合。它不直接告诉我分子量、极性表面积这些人工描述符，而是用 bit 位表达某些子结构是否出现。",{"type":19,"tag":27,"props":334,"children":335},{},[336],{"type":25,"value":337},"这一点很适合接 MLP。MLP 可以在高维稀疏特征上学习组合模式，但前提是数据量、正则化和划分方式都要站得住。",{"type":19,"tag":294,"props":339,"children":341},{"id":340},"mlp-结构",[342],{"type":25,"value":343},"MLP 结构",{"type":19,"tag":27,"props":345,"children":346},{},[347],{"type":25,"value":348},"这一版模型没有做复杂设计：",{"type":19,"tag":33,"props":350,"children":352},{"className":35,"code":351,"language":37,"meta":5,"style":5},"2048-bit Morgan fingerprint\n-> Linear(2048, 256)\n-> ReLU\n-> Dropout(0.1)\n-> Linear(256, 64)\n-> ReLU\n-> Linear(64, 1)\n-> predicted logS\n",[353],{"type":19,"tag":40,"props":354,"children":355},{"__ignoreMap":5},[356,364,372,380,388,396,403,411],{"type":19,"tag":44,"props":357,"children":358},{"class":46,"line":47},[359],{"type":19,"tag":44,"props":360,"children":361},{},[362],{"type":25,"value":363},"2048-bit Morgan fingerprint\n",{"type":19,"tag":44,"props":365,"children":366},{"class":46,"line":56},[367],{"type":19,"tag":44,"props":368,"children":369},{},[370],{"type":25,"value":371},"-> Linear(2048, 256)\n",{"type":19,"tag":44,"props":373,"children":374},{"class":46,"line":65},[375],{"type":19,"tag":44,"props":376,"children":377},{},[378],{"type":25,"value":379},"-> ReLU\n",{"type":19,"tag":44,"props":381,"children":382},{"class":46,"line":74},[383],{"type":19,"tag":44,"props":384,"children":385},{},[386],{"type":25,"value":387},"-> Dropout(0.1)\n",{"type":19,"tag":44,"props":389,"children":390},{"class":46,"line":83},[391],{"type":19,"tag":44,"props":392,"children":393},{},[394],{"type":25,"value":395},"-> Linear(256, 64)\n",{"type":19,"tag":44,"props":397,"children":398},{"class":46,"line":92},[399],{"type":19,"tag":44,"props":400,"children":401},{},[402],{"type":25,"value":379},{"type":19,"tag":44,"props":404,"children":405},{"class":46,"line":100},[406],{"type":19,"tag":44,"props":407,"children":408},{},[409],{"type":25,"value":410},"-> Linear(64, 1)\n",{"type":19,"tag":44,"props":412,"children":413},{"class":46,"line":109},[414],{"type":19,"tag":44,"props":415,"children":416},{},[417],{"type":25,"value":418},"-> predicted logS\n",{"type":19,"tag":27,"props":420,"children":421},{},[422,424,430,432,438,440,445,447,453,455,460],{"type":25,"value":423},"ESOL 是回归任务，输出是连续的 ",{"type":19,"tag":40,"props":425,"children":427},{"className":426},[],[428],{"type":25,"value":429},"logS",{"type":25,"value":431},"，所以最后一层保持线性输出，不加 ",{"type":19,"tag":40,"props":433,"children":435},{"className":434},[],[436],{"type":25,"value":437},"sigmoid",{"type":25,"value":439},"。如果加了 ",{"type":19,"tag":40,"props":441,"children":443},{"className":442},[],[444],{"type":25,"value":437},{"type":25,"value":446},"，输出会被压到 ",{"type":19,"tag":40,"props":448,"children":450},{"className":449},[],[451],{"type":25,"value":452},"[0, 1]",{"type":25,"value":454},"，而 ",{"type":19,"tag":40,"props":456,"children":458},{"className":457},[],[459],{"type":25,"value":429},{"type":25,"value":461}," 本身并不在这个范围内。",{"type":19,"tag":27,"props":463,"children":464},{},[465,467,473,475,480],{"type":25,"value":466},"训练时使用 ",{"type":19,"tag":40,"props":468,"children":470},{"className":469},[],[471],{"type":25,"value":472},"MSELoss",{"type":25,"value":474},"。目标值先根据训练集均值和标准差做标准化，评估 MAE、RMSE、R2 时再还原到原始 ",{"type":19,"tag":40,"props":476,"children":478},{"className":477},[],[479],{"type":25,"value":429},{"type":25,"value":481}," 尺度。",{"type":19,"tag":294,"props":483,"children":485},{"id":484},"pytorch-训练闭环",[486],{"type":25,"value":487},"PyTorch 训练闭环",{"type":19,"tag":27,"props":489,"children":490},{},[491],{"type":25,"value":492},"核心脚本是：",{"type":19,"tag":33,"props":494,"children":496},{"className":35,"code":495,"language":37,"meta":5,"style":5},"ml-experiments\u002Fesol_mlp.py\n",[497],{"type":19,"tag":40,"props":498,"children":499},{"__ignoreMap":5},[500],{"type":19,"tag":44,"props":501,"children":502},{"class":46,"line":47},[503],{"type":19,"tag":44,"props":504,"children":505},{},[506],{"type":25,"value":495},{"type":19,"tag":27,"props":508,"children":509},{},[510],{"type":25,"value":511},"新增输出包括：",{"type":19,"tag":33,"props":513,"children":515},{"className":35,"code":514,"language":37,"meta":5,"style":5},"models\u002Fesol_mlp.pt\nml-experiments\u002Foutputs\u002Fesol_mlp_metrics.json\nml-experiments\u002Foutputs\u002Fesol_mlp_predictions.csv\nml-experiments\u002Foutputs\u002Fesol_mlp_training_log.csv\nml-experiments\u002Foutputs\u002Ffigures\u002Fesol_mlp_loss_curve.png\nml-experiments\u002Freports\u002Fesol_model_compare.md\n",[516],{"type":19,"tag":40,"props":517,"children":518},{"__ignoreMap":5},[519,527,535,543,551,559],{"type":19,"tag":44,"props":520,"children":521},{"class":46,"line":47},[522],{"type":19,"tag":44,"props":523,"children":524},{},[525],{"type":25,"value":526},"models\u002Fesol_mlp.pt\n",{"type":19,"tag":44,"props":528,"children":529},{"class":46,"line":56},[530],{"type":19,"tag":44,"props":531,"children":532},{},[533],{"type":25,"value":534},"ml-experiments\u002Foutputs\u002Fesol_mlp_metrics.json\n",{"type":19,"tag":44,"props":536,"children":537},{"class":46,"line":65},[538],{"type":19,"tag":44,"props":539,"children":540},{},[541],{"type":25,"value":542},"ml-experiments\u002Foutputs\u002Fesol_mlp_predictions.csv\n",{"type":19,"tag":44,"props":544,"children":545},{"class":46,"line":74},[546],{"type":19,"tag":44,"props":547,"children":548},{},[549],{"type":25,"value":550},"ml-experiments\u002Foutputs\u002Fesol_mlp_training_log.csv\n",{"type":19,"tag":44,"props":552,"children":553},{"class":46,"line":83},[554],{"type":19,"tag":44,"props":555,"children":556},{},[557],{"type":25,"value":558},"ml-experiments\u002Foutputs\u002Ffigures\u002Fesol_mlp_loss_curve.png\n",{"type":19,"tag":44,"props":560,"children":561},{"class":46,"line":92},[562],{"type":19,"tag":44,"props":563,"children":564},{},[565],{"type":25,"value":566},"ml-experiments\u002Freports\u002Fesol_model_compare.md\n",{"type":19,"tag":27,"props":568,"children":569},{},[570,576,578,584],{"type":19,"tag":40,"props":571,"children":573},{"className":572},[],[574],{"type":25,"value":575},"Dataset",{"type":25,"value":577}," 负责定义一条样本如何取出，",{"type":19,"tag":40,"props":579,"children":581},{"className":580},[],[582],{"type":25,"value":583},"DataLoader",{"type":25,"value":585}," 负责批量加载。训练时记录 train loss 和 validation loss，并加入 early stopping。validation loss 连续多轮不下降时停止训练，再恢复验证集表现最好的参数。",{"type":19,"tag":27,"props":587,"children":588},{},[589],{"type":25,"value":590},"模型 checkpoint 里保存了：",{"type":19,"tag":592,"props":593,"children":594},"ul",{},[595,605,610,615,620],{"type":19,"tag":596,"props":597,"children":598},"li",{},[599],{"type":19,"tag":40,"props":600,"children":602},{"className":601},[],[603],{"type":25,"value":604},"model_state_dict",{"type":19,"tag":596,"props":606,"children":607},{},[608],{"type":25,"value":609},"MLP 结构参数",{"type":19,"tag":596,"props":611,"children":612},{},[613],{"type":25,"value":614},"fingerprint 参数",{"type":19,"tag":596,"props":616,"children":617},{},[618],{"type":25,"value":619},"目标值标准化参数",{"type":19,"tag":596,"props":621,"children":622},{},[623],{"type":25,"value":624},"train \u002F validation \u002F test 指标",{"type":19,"tag":27,"props":626,"children":627},{},[628],{"type":25,"value":629},"这样后续做预测服务时，不需要重新猜模型结构和特征配置。",{"type":19,"tag":294,"props":631,"children":633},{"id":632},"对比结果",[634],{"type":25,"value":632},{"type":19,"tag":27,"props":636,"children":637},{},[638],{"type":25,"value":639},"这周最关键的文件不是单个模型结果，而是：",{"type":19,"tag":33,"props":641,"children":642},{"className":35,"code":566,"language":37,"meta":5,"style":5},[643],{"type":19,"tag":40,"props":644,"children":645},{"__ignoreMap":5},[646],{"type":19,"tag":44,"props":647,"children":648},{"class":46,"line":47},[649],{"type":19,"tag":44,"props":650,"children":651},{},[652],{"type":25,"value":566},{"type":19,"tag":27,"props":654,"children":655},{},[656],{"type":25,"value":657},"在同样的 random split 下，第 4 周和第 5 周的测试集结果是：",{"type":19,"tag":659,"props":660,"children":661},"table",{},[662,692],{"type":19,"tag":663,"props":664,"children":665},"thead",{},[666],{"type":19,"tag":667,"props":668,"children":669},"tr",{},[670,676,682,687],{"type":19,"tag":671,"props":672,"children":673},"th",{},[674],{"type":25,"value":675},"模型",{"type":19,"tag":671,"props":677,"children":679},{"align":678},"right",[680],{"type":25,"value":681},"MAE",{"type":19,"tag":671,"props":683,"children":684},{"align":678},[685],{"type":25,"value":686},"RMSE",{"type":19,"tag":671,"props":688,"children":689},{"align":678},[690],{"type":25,"value":691},"R2",{"type":19,"tag":693,"props":694,"children":695},"tbody",{},[696,720],{"type":19,"tag":667,"props":697,"children":698},{},[699,705,710,715],{"type":19,"tag":700,"props":701,"children":702},"td",{},[703],{"type":25,"value":704},"RDKit descriptors + RandomForest",{"type":19,"tag":700,"props":706,"children":707},{"align":678},[708],{"type":25,"value":709},"0.5415",{"type":19,"tag":700,"props":711,"children":712},{"align":678},[713],{"type":25,"value":714},"0.7690",{"type":19,"tag":700,"props":716,"children":717},{"align":678},[718],{"type":25,"value":719},"0.8611",{"type":19,"tag":667,"props":721,"children":722},{},[723,728,733,738],{"type":19,"tag":700,"props":724,"children":725},{},[726],{"type":25,"value":727},"Morgan Fingerprint + MLP",{"type":19,"tag":700,"props":729,"children":730},{"align":678},[731],{"type":25,"value":732},"0.9183",{"type":19,"tag":700,"props":734,"children":735},{"align":678},[736],{"type":25,"value":737},"1.1934",{"type":19,"tag":700,"props":739,"children":740},{"align":678},[741],{"type":25,"value":742},"0.6655",{"type":19,"tag":27,"props":744,"children":745},{},[746],{"type":25,"value":747},"这次 MLP 没有超过 RandomForest。",{"type":19,"tag":27,"props":749,"children":750},{},[751],{"type":25,"value":752},"这个结果并不意外。ESOL 数据集规模不大，RandomForest 对低维描述符的处理很稳，而 MLP 对训练细节更敏感。高维 fingerprint 加 MLP 如果没有足够数据和调参，很容易学不到比传统 baseline 更好的规律。",{"type":19,"tag":294,"props":754,"children":756},{"id":755},"这周真正留下来的判断",[757],{"type":25,"value":755},{"type":19,"tag":27,"props":759,"children":760},{},[761],{"type":25,"value":762},"第 5 周最大的收获不是“写了一个神经网络”，而是把深度学习模型放进了同一套评估框架里。",{"type":19,"tag":27,"props":764,"children":765},{},[766],{"type":25,"value":767},"如果没有第 4 周的 baseline，这周只看 MLP 自己的 loss 曲线，很容易误以为模型已经有效。但一对比指标，就能看到它并没有带来收益。",{"type":19,"tag":27,"props":769,"children":770},{},[771],{"type":25,"value":772},"这也改变了后续路线的判断顺序：",{"type":19,"tag":592,"props":774,"children":775},{},[776,781,786,791],{"type":19,"tag":596,"props":777,"children":778},{},[779],{"type":25,"value":780},"先保证数据处理正确",{"type":19,"tag":596,"props":782,"children":783},{},[784],{"type":25,"value":785},"先建立传统 ML baseline",{"type":19,"tag":596,"props":787,"children":788},{},[789],{"type":25,"value":790},"再比较 MLP 或 GNN 是否真的提升",{"type":19,"tag":596,"props":792,"children":793},{},[794],{"type":25,"value":795},"不用模型复杂度替代实验结论",{"type":19,"tag":27,"props":797,"children":798},{},[799],{"type":25,"value":800},"第 5 周结束后，项目里已经有了两类分子表征：人工描述符和 Morgan Fingerprint。下一步进入 Tox21，多标签毒性分类会比 ESOL 回归更接近 AI 制药里的 ADMET 语境。",{"type":19,"tag":802,"props":803,"children":804},"style",{},[805],{"type":25,"value":806},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":5,"searchDepth":56,"depth":56,"links":808},[809,810],{"id":22,"depth":56,"text":22},{"id":204,"depth":56,"text":7,"children":811},[812,813,814,815,816],{"id":296,"depth":65,"text":299},{"id":340,"depth":65,"text":343},{"id":484,"depth":65,"text":487},{"id":632,"depth":65,"text":632},{"id":755,"depth":65,"text":755},"markdown","content:articles:生信基础:ai-drug-week05-morgan-mlp.md","content","articles\u002F生信基础\u002Fai-drug-week05-morgan-mlp.md","articles\u002F生信基础\u002Fai-drug-week05-morgan-mlp","md",1780895158451]