[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-batched-l2-norm-layer-for-torch-neural-nets-summary":3,"summaries-facets-categories":147,"summary-related-batched-l2-norm-layer-for-torch-neural-nets-summary":3732},{"id":4,"title":5,"ai":6,"body":13,"categories":125,"created_at":127,"date_modified":127,"description":119,"extension":128,"faq":127,"featured":129,"kicker_label":127,"meta":130,"navigation":131,"path":132,"published_at":133,"question":127,"scraped_at":127,"seo":134,"sitemap":135,"source_id":136,"source_name":137,"source_type":138,"source_url":139,"stem":140,"tags":141,"thumbnail_url":127,"tldr":144,"tweet":127,"unknown_tags":145,"__hash__":146},"summaries\u002Fsummaries\u002Fbatched-l2-norm-layer-for-torch-neural-nets-summary.md","Batched L2 Norm Layer for Torch Neural Nets",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",4617,1235,10447,0.0015184,{"type":14,"value":15,"toc":118},"minimark",[16,21,30,45,49,56,96,100],[17,18,20],"h2",{"id":19},"core-layer-design","Core Layer Design",[22,23,24,25,29],"p",{},"This nn.L2Normalize module processes 2D tensors (batch size n x vector dim d), normalizing each row vector to unit L2 norm (||x||_2 = 1). Use it in Torch neural nets for tasks like embedding normalization, where direction matters more than magnitude. Instantiate via ",[26,27,28],"code",{},"local layer = nn.L2Normalize()",", then integrate into models like Sequential for end-to-end differentiability.",[22,31,32,33,36,37,40,41,44],{},"Forward pass (",[26,34,35],{},"updateOutput","): Computes per-row L2 norms squared via elementwise square and sum over dim 2 (",[26,38,39],{},"input:cmul(input):sum(2)","), takes sqrt, then elementwise divides input by expanded norms (",[26,42,43],{},"input:cdiv(buffer:expandAs(input))","). Avoids loops for batch efficiency; buffers reuse across calls.",[17,46,48],{"id":47},"gradient-computation","Gradient Computation",[22,50,51,52,55],{},"Backward pass (",[26,53,54],{},"updateGradInput",") derives local Jacobian of L2 transform for chain rule. Key steps:",[57,58,59,67,73,79,85],"ul",{},[60,61,62,63,66],"li",{},"Forms identity tensor repeated over batch (",[26,64,65],{},"torch.eye(d):repeatTensor(n,1):view(n,d,d)",").",[60,68,69,70,66],{},"Scales diagonal by norm squared (",[26,71,72],{},"cmul(eye, normSquared:view(n,1,1):expand(n,d,d))",[60,74,75,76,66],{},"Subtracts outer products (",[26,77,78],{},"-torch.bmm(input:view(n,d,1), input:view(n,1,d))",[60,80,81,82,66],{},"Divides by cubed norms (",[26,83,84],{},"cdiv(pow(buffer,3):expand(n,d,d))",[60,86,87,88,91,92,95],{},"Applies via batched matmul: ",[26,89,90],{},"bmm(diag, gradOutput:view(n,d,1)):resize(n,d)"," (fixed with ",[26,93,94],{},":squeeze()"," post-line 31).\nThis ensures correct gradients during backprop, critical for training stability in nets with normalization layers.",[17,97,99],{"id":98},"implementation-notes-and-fixes","Implementation Notes and Fixes",[22,101,102,103,106,107,110,111,113,114,117],{},"Code uses lazy buffer init (",[26,104,105],{},"self.buffer = self.buffer or input.new()",") for memory efficiency. Assumes mini-batch inputs only (errors on non-2D). Community feedback: Could swap manual norm for ",[26,108,109],{},"torch.norm()"," in forward for simplicity; Karpathy confirmed feasibility. Atcold noted dimension mismatch in gradInput without ",[26,112,94],{}," after bmm resize—fixed by author. Soumith (Torch maintainer) provided additional pointers (unspecified). Thin gist from 2015; modern PyTorch has ",[26,115,116],{},"torch.nn.functional.normalize(p=2, dim=1)"," as built-in alternative.",{"title":119,"searchDepth":120,"depth":120,"links":121},"",2,[122,123,124],{"id":19,"depth":120,"text":20},{"id":47,"depth":120,"text":48},{"id":98,"depth":120,"text":99},[126],"Software Engineering",null,"md",false,{},true,"\u002Fsummaries\u002Fbatched-l2-norm-layer-for-torch-neural-nets-summary","2026-04-08 21:21:20",{"title":5,"description":119},{"loc":132},"07bd9d1a251cebe3","Andrej Karpathy Gists","article","https:\u002F\u002Funknown","summaries\u002Fbatched-l2-norm-layer-for-torch-neural-nets-summary",[142,143],"deep-learning","machine-learning","Custom Torch nn.Module normalizes each row of n x d input tensor to unit L2 norm, with efficient batched forward\u002Fbackward passes for training.",[],"20C1Dsl0GWqJxzOXYYcvQPEK3LwoQdSQgNUb_QYBP5Q",[148,151,154,157,160,163,165,167,169,171,173,175,178,180,182,184,186,188,190,192,194,196,199,202,204,206,208,210,212,215,217,219,221,223,225,227,229,231,233,235,237,239,241,243,245,247,249,251,253,255,257,259,261,263,265,267,269,271,273,275,277,279,281,283,285,287,289,291,293,295,297,299,301,303,305,307,309,311,313,315,317,319,321,323,325,327,329,331,333,335,337,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367,369,371,373,375,377,379,381,383,385,387,389,391,393,395,397,399,401,403,405,407,409,411,413,415,417,419,421,423,425,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459,461,463,465,467,469,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,674,676,678,680,682,684,686,688,690,692,694,696,698,700,702,704,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768,770,772,774,776,778,780,782,784,786,788,790,792,794,796,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902,904,906,908,910,912,914,916,918,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962,964,966,968,970,972,974,976,978,980,982,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730],{"categories":149},[150],"Developer Productivity",{"categories":152},[153],"Business & SaaS",{"categories":155},[156],"AI & LLMs",{"categories":158},[159],"AI Automation",{"categories":161},[162],"Product Strategy",{"categories":164},[156],{"categories":166},[150],{"categories":168},[153],{"categories":170},[],{"categories":172},[156],{"categories":174},[],{"categories":176},[177],"AI News & Trends",{"categories":179},[159],{"categories":181},[177],{"categories":183},[159],{"categories":185},[159],{"categories":187},[156],{"categories":189},[156],{"categories":191},[177],{"categories":193},[156],{"categories":195},[],{"categories":197},[198],"Design & Frontend",{"categories":200},[201],"Data Science & Visualization",{"categories":203},[177],{"categories":205},[],{"categories":207},[126],{"categories":209},[156],{"categories":211},[159],{"categories":213},[214],"Marketing & Growth",{"categories":216},[156],{"categories":218},[159],{"categories":220},[],{"categories":222},[],{"categories":224},[198],{"categories":226},[159],{"categories":228},[150],{"categories":230},[198],{"categories":232},[156],{"categories":234},[159],{"categories":236},[177],{"categories":238},[],{"categories":240},[],{"categories":242},[159],{"categories":244},[126],{"categories":246},[],{"categories":248},[153],{"categories":250},[],{"categories":252},[],{"categories":254},[159],{"categories":256},[159],{"categories":258},[156],{"categories":260},[],{"categories":262},[126],{"categories":264},[],{"categories":266},[],{"categories":268},[],{"categories":270},[156],{"categories":272},[214],{"categories":274},[198],{"categories":276},[198],{"categories":278},[156],{"categories":280},[159],{"categories":282},[156],{"categories":284},[156],{"categories":286},[159],{"categories":288},[159],{"categories":290},[201],{"categories":292},[177],{"categories":294},[159],{"categories":296},[214],{"categories":298},[159],{"categories":300},[162],{"categories":302},[],{"categories":304},[159],{"categories":306},[],{"categories":308},[159],{"categories":310},[126],{"categories":312},[198],{"categories":314},[156],{"categories":316},[],{"categories":318},[],{"categories":320},[159],{"categories":322},[],{"categories":324},[156],{"categories":326},[],{"categories":328},[150],{"categories":330},[126],{"categories":332},[153],{"categories":334},[177],{"categories":336},[156],{"categories":338},[],{"categories":340},[156],{"categories":342},[],{"categories":344},[126],{"categories":346},[201],{"categories":348},[],{"categories":350},[156],{"categories":352},[198],{"categories":354},[],{"categories":356},[198],{"categories":358},[159],{"categories":360},[],{"categories":362},[159],{"categories":364},[177],{"categories":366},[153],{"categories":368},[156],{"categories":370},[],{"categories":372},[159],{"categories":374},[156],{"categories":376},[162],{"categories":378},[],{"categories":380},[156],{"categories":382},[159],{"categories":384},[159],{"categories":386},[],{"categories":388},[201],{"categories":390},[156],{"categories":392},[],{"categories":394},[150],{"categories":396},[153],{"categories":398},[156],{"categories":400},[159],{"categories":402},[126],{"categories":404},[156],{"categories":406},[],{"categories":408},[],{"categories":410},[156],{"categories":412},[],{"categories":414},[198],{"categories":416},[],{"categories":418},[156],{"categories":420},[],{"categories":422},[159],{"categories":424},[156],{"categories":426},[198],{"categories":428},[],{"categories":430},[156],{"categories":432},[156],{"categories":434},[153],{"categories":436},[159],{"categories":438},[156],{"categories":440},[198],{"categories":442},[159],{"categories":444},[],{"categories":446},[],{"categories":448},[177],{"categories":450},[],{"categories":452},[156],{"categories":454},[153,214],{"categories":456},[],{"categories":458},[156],{"categories":460},[],{"categories":462},[],{"categories":464},[156],{"categories":466},[],{"categories":468},[156],{"categories":470},[471],"DevOps & Cloud",{"categories":473},[],{"categories":475},[177],{"categories":477},[198],{"categories":479},[],{"categories":481},[177],{"categories":483},[177],{"categories":485},[156],{"categories":487},[214],{"categories":489},[],{"categories":491},[153],{"categories":493},[],{"categories":495},[156,471],{"categories":497},[156],{"categories":499},[156],{"categories":501},[159],{"categories":503},[156,126],{"categories":505},[201],{"categories":507},[156],{"categories":509},[214],{"categories":511},[159],{"categories":513},[159],{"categories":515},[],{"categories":517},[159],{"categories":519},[156,153],{"categories":521},[],{"categories":523},[198],{"categories":525},[198],{"categories":527},[],{"categories":529},[],{"categories":531},[177],{"categories":533},[],{"categories":535},[150],{"categories":537},[126],{"categories":539},[156],{"categories":541},[198],{"categories":543},[159],{"categories":545},[126],{"categories":547},[177],{"categories":549},[198],{"categories":551},[],{"categories":553},[156],{"categories":555},[156],{"categories":557},[156],{"categories":559},[177],{"categories":561},[150],{"categories":563},[156],{"categories":565},[159],{"categories":567},[471],{"categories":569},[198],{"categories":571},[159],{"categories":573},[],{"categories":575},[],{"categories":577},[198],{"categories":579},[177],{"categories":581},[201],{"categories":583},[],{"categories":585},[156],{"categories":587},[156],{"categories":589},[153],{"categories":591},[156],{"categories":593},[156],{"categories":595},[177],{"categories":597},[],{"categories":599},[159],{"categories":601},[126],{"categories":603},[],{"categories":605},[156],{"categories":607},[156],{"categories":609},[159],{"categories":611},[],{"categories":613},[],{"categories":615},[156],{"categories":617},[],{"categories":619},[153],{"categories":621},[159],{"categories":623},[],{"categories":625},[150],{"categories":627},[156],{"categories":629},[153],{"categories":631},[177],{"categories":633},[],{"categories":635},[],{"categories":637},[],{"categories":639},[177],{"categories":641},[177],{"categories":643},[],{"categories":645},[],{"categories":647},[153],{"categories":649},[],{"categories":651},[],{"categories":653},[150],{"categories":655},[],{"categories":657},[214],{"categories":659},[159],{"categories":661},[153],{"categories":663},[159],{"categories":665},[126],{"categories":667},[],{"categories":669},[162],{"categories":671},[198],{"categories":673},[126],{"categories":675},[156],{"categories":677},[159],{"categories":679},[153],{"categories":681},[156],{"categories":683},[],{"categories":685},[],{"categories":687},[126],{"categories":689},[201],{"categories":691},[162],{"categories":693},[159],{"categories":695},[156],{"categories":697},[],{"categories":699},[471],{"categories":701},[],{"categories":703},[159],{"categories":705},[],{"categories":707},[],{"categories":709},[156],{"categories":711},[198],{"categories":713},[214],{"categories":715},[159],{"categories":717},[],{"categories":719},[150],{"categories":721},[],{"categories":723},[177],{"categories":725},[156,471],{"categories":727},[177],{"categories":729},[156],{"categories":731},[153],{"categories":733},[156],{"categories":735},[],{"categories":737},[153],{"categories":739},[],{"categories":741},[126],{"categories":743},[198],{"categories":745},[177],{"categories":747},[201],{"categories":749},[150],{"categories":751},[156],{"categories":753},[126],{"categories":755},[],{"categories":757},[],{"categories":759},[162],{"categories":761},[],{"categories":763},[156],{"categories":765},[],{"categories":767},[198],{"categories":769},[198],{"categories":771},[198],{"categories":773},[],{"categories":775},[],{"categories":777},[177],{"categories":779},[159],{"categories":781},[156],{"categories":783},[156],{"categories":785},[156],{"categories":787},[153],{"categories":789},[156],{"categories":791},[],{"categories":793},[126],{"categories":795},[126],{"categories":797},[153],{"categories":799},[],{"categories":801},[156],{"categories":803},[156],{"categories":805},[153],{"categories":807},[177],{"categories":809},[214],{"categories":811},[159],{"categories":813},[],{"categories":815},[198],{"categories":817},[],{"categories":819},[156],{"categories":821},[],{"categories":823},[153],{"categories":825},[159],{"categories":827},[],{"categories":829},[471],{"categories":831},[201],{"categories":833},[126],{"categories":835},[214],{"categories":837},[126],{"categories":839},[159],{"categories":841},[],{"categories":843},[],{"categories":845},[159],{"categories":847},[150],{"categories":849},[159],{"categories":851},[162],{"categories":853},[153],{"categories":855},[],{"categories":857},[156],{"categories":859},[162],{"categories":861},[156],{"categories":863},[156],{"categories":865},[214],{"categories":867},[198],{"categories":869},[159],{"categories":871},[],{"categories":873},[],{"categories":875},[471],{"categories":877},[126],{"categories":879},[],{"categories":881},[159],{"categories":883},[156],{"categories":885},[198,156],{"categories":887},[150],{"categories":889},[],{"categories":891},[156],{"categories":893},[150],{"categories":895},[198],{"categories":897},[159],{"categories":899},[126],{"categories":901},[],{"categories":903},[156],{"categories":905},[],{"categories":907},[150],{"categories":909},[],{"categories":911},[159],{"categories":913},[162],{"categories":915},[156],{"categories":917},[156],{"categories":919},[198],{"categories":921},[159],{"categories":923},[471],{"categories":925},[198],{"categories":927},[159],{"categories":929},[156],{"categories":931},[156],{"categories":933},[156],{"categories":935},[177],{"categories":937},[],{"categories":939},[162],{"categories":941},[159],{"categories":943},[198],{"categories":945},[159],{"categories":947},[126],{"categories":949},[198],{"categories":951},[159],{"categories":953},[177],{"categories":955},[],{"categories":957},[156],{"categories":959},[198],{"categories":961},[156],{"categories":963},[150],{"categories":965},[177],{"categories":967},[156],{"categories":969},[214],{"categories":971},[156],{"categories":973},[156],{"categories":975},[159],{"categories":977},[159],{"categories":979},[156],{"categories":981},[159],{"categories":983},[198],{"categories":985},[156],{"categories":987},[],{"categories":989},[],{"categories":991},[126],{"categories":993},[],{"categories":995},[150],{"categories":997},[471],{"categories":999},[],{"categories":1001},[150],{"categories":1003},[153],{"categories":1005},[214],{"categories":1007},[],{"categories":1009},[153],{"categories":1011},[],{"categories":1013},[],{"categories":1015},[],{"categories":1017},[],{"categories":1019},[],{"categories":1021},[156],{"categories":1023},[159],{"categories":1025},[471],{"categories":1027},[150],{"categories":1029},[156],{"categories":1031},[126],{"categories":1033},[162],{"categories":1035},[156],{"categories":1037},[214],{"categories":1039},[156],{"categories":1041},[156],{"categories":1043},[156],{"categories":1045},[156,150],{"categories":1047},[126],{"categories":1049},[126],{"categories":1051},[198],{"categories":1053},[156],{"categories":1055},[],{"categories":1057},[],{"categories":1059},[],{"categories":1061},[126],{"categories":1063},[201],{"categories":1065},[177],{"categories":1067},[198],{"categories":1069},[],{"categories":1071},[156],{"categories":1073},[156],{"categories":1075},[],{"categories":1077},[],{"categories":1079},[159],{"categories":1081},[156],{"categories":1083},[153],{"categories":1085},[],{"categories":1087},[150],{"categories":1089},[156],{"categories":1091},[150],{"categories":1093},[156],{"categories":1095},[126],{"categories":1097},[214],{"categories":1099},[156,198],{"categories":1101},[177],{"categories":1103},[198],{"categories":1105},[],{"categories":1107},[471],{"categories":1109},[198],{"categories":1111},[159],{"categories":1113},[],{"categories":1115},[],{"categories":1117},[],{"categories":1119},[],{"categories":1121},[126],{"categories":1123},[159],{"categories":1125},[159],{"categories":1127},[471],{"categories":1129},[156],{"categories":1131},[156],{"categories":1133},[156],{"categories":1135},[],{"categories":1137},[198],{"categories":1139},[],{"categories":1141},[],{"categories":1143},[159],{"categories":1145},[],{"categories":1147},[],{"categories":1149},[214],{"categories":1151},[214],{"categories":1153},[159],{"categories":1155},[],{"categories":1157},[156],{"categories":1159},[156],{"categories":1161},[126],{"categories":1163},[198],{"categories":1165},[198],{"categories":1167},[159],{"categories":1169},[150],{"categories":1171},[156],{"categories":1173},[198],{"categories":1175},[198],{"categories":1177},[159],{"categories":1179},[159],{"categories":1181},[156],{"categories":1183},[],{"categories":1185},[],{"categories":1187},[156],{"categories":1189},[159],{"categories":1191},[177],{"categories":1193},[126],{"categories":1195},[150],{"categories":1197},[156],{"categories":1199},[],{"categories":1201},[159],{"categories":1203},[159],{"categories":1205},[],{"categories":1207},[150],{"categories":1209},[156],{"categories":1211},[150],{"categories":1213},[150],{"categories":1215},[],{"categories":1217},[],{"categories":1219},[159],{"categories":1221},[159],{"categories":1223},[156],{"categories":1225},[156],{"categories":1227},[177],{"categories":1229},[201],{"categories":1231},[162],{"categories":1233},[177],{"categories":1235},[198],{"categories":1237},[],{"categories":1239},[177],{"categories":1241},[],{"categories":1243},[],{"categories":1245},[],{"categories":1247},[],{"categories":1249},[126],{"categories":1251},[201],{"categories":1253},[],{"categories":1255},[156],{"categories":1257},[156],{"categories":1259},[201],{"categories":1261},[126],{"categories":1263},[],{"categories":1265},[],{"categories":1267},[159],{"categories":1269},[177],{"categories":1271},[177],{"categories":1273},[159],{"categories":1275},[150],{"categories":1277},[156,471],{"categories":1279},[],{"categories":1281},[198],{"categories":1283},[150],{"categories":1285},[159],{"categories":1287},[198],{"categories":1289},[],{"categories":1291},[159],{"categories":1293},[159],{"categories":1295},[156],{"categories":1297},[214],{"categories":1299},[126],{"categories":1301},[198],{"categories":1303},[],{"categories":1305},[159],{"categories":1307},[156],{"categories":1309},[159],{"categories":1311},[159],{"categories":1313},[159],{"categories":1315},[214],{"categories":1317},[159],{"categories":1319},[156],{"categories":1321},[],{"categories":1323},[214],{"categories":1325},[177],{"categories":1327},[159],{"categories":1329},[],{"categories":1331},[],{"categories":1333},[156],{"categories":1335},[159],{"categories":1337},[177],{"categories":1339},[159],{"categories":1341},[],{"categories":1343},[],{"categories":1345},[],{"categories":1347},[159],{"categories":1349},[],{"categories":1351},[],{"categories":1353},[201],{"categories":1355},[156],{"categories":1357},[201],{"categories":1359},[177],{"categories":1361},[156],{"categories":1363},[156],{"categories":1365},[159],{"categories":1367},[156],{"categories":1369},[],{"categories":1371},[],{"categories":1373},[471],{"categories":1375},[],{"categories":1377},[],{"categories":1379},[150],{"categories":1381},[],{"categories":1383},[],{"categories":1385},[],{"categories":1387},[],{"categories":1389},[126],{"categories":1391},[177],{"categories":1393},[214],{"categories":1395},[153],{"categories":1397},[156],{"categories":1399},[156],{"categories":1401},[153],{"categories":1403},[],{"categories":1405},[198],{"categories":1407},[159],{"categories":1409},[153],{"categories":1411},[156],{"categories":1413},[156],{"categories":1415},[150],{"categories":1417},[],{"categories":1419},[150],{"categories":1421},[156],{"categories":1423},[214],{"categories":1425},[159],{"categories":1427},[177],{"categories":1429},[153],{"categories":1431},[156],{"categories":1433},[159],{"categories":1435},[],{"categories":1437},[156],{"categories":1439},[150],{"categories":1441},[156],{"categories":1443},[],{"categories":1445},[177],{"categories":1447},[156],{"categories":1449},[],{"categories":1451},[153],{"categories":1453},[156],{"categories":1455},[],{"categories":1457},[],{"categories":1459},[],{"categories":1461},[156],{"categories":1463},[],{"categories":1465},[471],{"categories":1467},[156],{"categories":1469},[],{"categories":1471},[156],{"categories":1473},[156],{"categories":1475},[156],{"categories":1477},[156,471],{"categories":1479},[156],{"categories":1481},[156],{"categories":1483},[198],{"categories":1485},[159],{"categories":1487},[],{"categories":1489},[159],{"categories":1491},[156],{"categories":1493},[156],{"categories":1495},[156],{"categories":1497},[150],{"categories":1499},[150],{"categories":1501},[126],{"categories":1503},[198],{"categories":1505},[159],{"categories":1507},[],{"categories":1509},[156],{"categories":1511},[177],{"categories":1513},[156],{"categories":1515},[153],{"categories":1517},[],{"categories":1519},[471],{"categories":1521},[198],{"categories":1523},[198],{"categories":1525},[159],{"categories":1527},[177],{"categories":1529},[159],{"categories":1531},[156],{"categories":1533},[],{"categories":1535},[156],{"categories":1537},[],{"categories":1539},[],{"categories":1541},[156],{"categories":1543},[156],{"categories":1545},[156],{"categories":1547},[159],{"categories":1549},[156],{"categories":1551},[],{"categories":1553},[201],{"categories":1555},[159],{"categories":1557},[],{"categories":1559},[],{"categories":1561},[156],{"categories":1563},[177],{"categories":1565},[],{"categories":1567},[198],{"categories":1569},[471],{"categories":1571},[177],{"categories":1573},[126],{"categories":1575},[126],{"categories":1577},[177],{"categories":1579},[177],{"categories":1581},[471],{"categories":1583},[],{"categories":1585},[177],{"categories":1587},[156],{"categories":1589},[150],{"categories":1591},[177],{"categories":1593},[],{"categories":1595},[201],{"categories":1597},[177],{"categories":1599},[126],{"categories":1601},[177],{"categories":1603},[471],{"categories":1605},[156],{"categories":1607},[156],{"categories":1609},[],{"categories":1611},[153],{"categories":1613},[],{"categories":1615},[],{"categories":1617},[156],{"categories":1619},[156],{"categories":1621},[156],{"categories":1623},[156],{"categories":1625},[],{"categories":1627},[201],{"categories":1629},[150],{"categories":1631},[],{"categories":1633},[156],{"categories":1635},[156],{"categories":1637},[471],{"categories":1639},[471],{"categories":1641},[],{"categories":1643},[159],{"categories":1645},[177],{"categories":1647},[177],{"categories":1649},[156],{"categories":1651},[159],{"categories":1653},[],{"categories":1655},[198],{"categories":1657},[156],{"categories":1659},[156],{"categories":1661},[],{"categories":1663},[],{"categories":1665},[471],{"categories":1667},[156],{"categories":1669},[126],{"categories":1671},[153],{"categories":1673},[156],{"categories":1675},[],{"categories":1677},[159],{"categories":1679},[150],{"categories":1681},[150],{"categories":1683},[],{"categories":1685},[156],{"categories":1687},[198],{"categories":1689},[159],{"categories":1691},[],{"categories":1693},[156],{"categories":1695},[156],{"categories":1697},[159],{"categories":1699},[],{"categories":1701},[159],{"categories":1703},[126],{"categories":1705},[],{"categories":1707},[156],{"categories":1709},[],{"categories":1711},[156],{"categories":1713},[],{"categories":1715},[156],{"categories":1717},[156],{"categories":1719},[],{"categories":1721},[156],{"categories":1723},[177],{"categories":1725},[156],{"categories":1727},[156],{"categories":1729},[150],{"categories":1731},[156],{"categories":1733},[177],{"categories":1735},[159],{"categories":1737},[],{"categories":1739},[156],{"categories":1741},[214],{"categories":1743},[],{"categories":1745},[],{"categories":1747},[],{"categories":1749},[150],{"categories":1751},[177],{"categories":1753},[159],{"categories":1755},[156],{"categories":1757},[198],{"categories":1759},[159],{"categories":1761},[],{"categories":1763},[159],{"categories":1765},[],{"categories":1767},[156],{"categories":1769},[159],{"categories":1771},[156],{"categories":1773},[],{"categories":1775},[156],{"categories":1777},[156],{"categories":1779},[177],{"categories":1781},[198],{"categories":1783},[159],{"categories":1785},[198],{"categories":1787},[153],{"categories":1789},[],{"categories":1791},[],{"categories":1793},[156],{"categories":1795},[150],{"categories":1797},[177],{"categories":1799},[],{"categories":1801},[],{"categories":1803},[126],{"categories":1805},[198],{"categories":1807},[],{"categories":1809},[156],{"categories":1811},[],{"categories":1813},[214],{"categories":1815},[156],{"categories":1817},[471],{"categories":1819},[126],{"categories":1821},[],{"categories":1823},[159],{"categories":1825},[156],{"categories":1827},[159],{"categories":1829},[159],{"categories":1831},[156],{"categories":1833},[],{"categories":1835},[150],{"categories":1837},[156],{"categories":1839},[153],{"categories":1841},[126],{"categories":1843},[198],{"categories":1845},[],{"categories":1847},[],{"categories":1849},[],{"categories":1851},[159],{"categories":1853},[198],{"categories":1855},[177],{"categories":1857},[156],{"categories":1859},[177],{"categories":1861},[198],{"categories":1863},[],{"categories":1865},[198],{"categories":1867},[177],{"categories":1869},[153],{"categories":1871},[156],{"categories":1873},[177],{"categories":1875},[214],{"categories":1877},[],{"categories":1879},[],{"categories":1881},[201],{"categories":1883},[156,126],{"categories":1885},[177],{"categories":1887},[156],{"categories":1889},[159],{"categories":1891},[159],{"categories":1893},[156],{"categories":1895},[],{"categories":1897},[126],{"categories":1899},[156],{"categories":1901},[201],{"categories":1903},[159],{"categories":1905},[214],{"categories":1907},[471],{"categories":1909},[],{"categories":1911},[150],{"categories":1913},[159],{"categories":1915},[159],{"categories":1917},[126],{"categories":1919},[156],{"categories":1921},[156],{"categories":1923},[],{"categories":1925},[],{"categories":1927},[],{"categories":1929},[471],{"categories":1931},[177],{"categories":1933},[156],{"categories":1935},[156],{"categories":1937},[156],{"categories":1939},[],{"categories":1941},[201],{"categories":1943},[153],{"categories":1945},[],{"categories":1947},[159],{"categories":1949},[471],{"categories":1951},[],{"categories":1953},[198],{"categories":1955},[198],{"categories":1957},[],{"categories":1959},[126],{"categories":1961},[198],{"categories":1963},[156],{"categories":1965},[],{"categories":1967},[177],{"categories":1969},[156],{"categories":1971},[198],{"categories":1973},[159],{"categories":1975},[177],{"categories":1977},[],{"categories":1979},[159],{"categories":1981},[198],{"categories":1983},[156],{"categories":1985},[],{"categories":1987},[156],{"categories":1989},[156],{"categories":1991},[471],{"categories":1993},[177],{"categories":1995},[201],{"categories":1997},[201],{"categories":1999},[],{"categories":2001},[],{"categories":2003},[],{"categories":2005},[159],{"categories":2007},[126],{"categories":2009},[126],{"categories":2011},[],{"categories":2013},[],{"categories":2015},[156],{"categories":2017},[],{"categories":2019},[159],{"categories":2021},[156],{"categories":2023},[],{"categories":2025},[156],{"categories":2027},[153],{"categories":2029},[156],{"categories":2031},[214],{"categories":2033},[159],{"categories":2035},[156],{"categories":2037},[126],{"categories":2039},[177],{"categories":2041},[159],{"categories":2043},[],{"categories":2045},[177],{"categories":2047},[159],{"categories":2049},[159],{"categories":2051},[],{"categories":2053},[153],{"categories":2055},[159],{"categories":2057},[],{"categories":2059},[156],{"categories":2061},[150],{"categories":2063},[177],{"categories":2065},[471],{"categories":2067},[159],{"categories":2069},[159],{"categories":2071},[150],{"categories":2073},[156],{"categories":2075},[],{"categories":2077},[],{"categories":2079},[198],{"categories":2081},[156,153],{"categories":2083},[],{"categories":2085},[150],{"categories":2087},[201],{"categories":2089},[156],{"categories":2091},[126],{"categories":2093},[156],{"categories":2095},[159],{"categories":2097},[156],{"categories":2099},[156],{"categories":2101},[177],{"categories":2103},[159],{"categories":2105},[],{"categories":2107},[],{"categories":2109},[159],{"categories":2111},[156],{"categories":2113},[471],{"categories":2115},[],{"categories":2117},[156],{"categories":2119},[159],{"categories":2121},[],{"categories":2123},[156],{"categories":2125},[214],{"categories":2127},[201],{"categories":2129},[159],{"categories":2131},[156],{"categories":2133},[471],{"categories":2135},[],{"categories":2137},[156],{"categories":2139},[214],{"categories":2141},[198],{"categories":2143},[156],{"categories":2145},[],{"categories":2147},[214],{"categories":2149},[177],{"categories":2151},[156],{"categories":2153},[156],{"categories":2155},[150],{"categories":2157},[],{"categories":2159},[],{"categories":2161},[198],{"categories":2163},[156],{"categories":2165},[201],{"categories":2167},[214],{"categories":2169},[214],{"categories":2171},[177],{"categories":2173},[],{"categories":2175},[],{"categories":2177},[156],{"categories":2179},[],{"categories":2181},[156,126],{"categories":2183},[177],{"categories":2185},[159],{"categories":2187},[126],{"categories":2189},[156],{"categories":2191},[150],{"categories":2193},[],{"categories":2195},[],{"categories":2197},[150],{"categories":2199},[214],{"categories":2201},[156],{"categories":2203},[],{"categories":2205},[198,156],{"categories":2207},[471],{"categories":2209},[150],{"categories":2211},[],{"categories":2213},[153],{"categories":2215},[153],{"categories":2217},[156],{"categories":2219},[126],{"categories":2221},[159],{"categories":2223},[177],{"categories":2225},[214],{"categories":2227},[198],{"categories":2229},[156],{"categories":2231},[156],{"categories":2233},[156],{"categories":2235},[150],{"categories":2237},[156],{"categories":2239},[159],{"categories":2241},[177],{"categories":2243},[],{"categories":2245},[],{"categories":2247},[201],{"categories":2249},[126],{"categories":2251},[156],{"categories":2253},[198],{"categories":2255},[201],{"categories":2257},[156],{"categories":2259},[156],{"categories":2261},[159],{"categories":2263},[159],{"categories":2265},[156,153],{"categories":2267},[],{"categories":2269},[198],{"categories":2271},[],{"categories":2273},[156],{"categories":2275},[177],{"categories":2277},[150],{"categories":2279},[150],{"categories":2281},[159],{"categories":2283},[156],{"categories":2285},[153],{"categories":2287},[126],{"categories":2289},[214],{"categories":2291},[],{"categories":2293},[177],{"categories":2295},[156],{"categories":2297},[156],{"categories":2299},[177],{"categories":2301},[126],{"categories":2303},[156],{"categories":2305},[159],{"categories":2307},[177],{"categories":2309},[156],{"categories":2311},[198],{"categories":2313},[156],{"categories":2315},[156],{"categories":2317},[471],{"categories":2319},[162],{"categories":2321},[159],{"categories":2323},[156],{"categories":2325},[177],{"categories":2327},[159],{"categories":2329},[214],{"categories":2331},[156],{"categories":2333},[],{"categories":2335},[156],{"categories":2337},[],{"categories":2339},[],{"categories":2341},[],{"categories":2343},[153],{"categories":2345},[156],{"categories":2347},[159],{"categories":2349},[177],{"categories":2351},[177],{"categories":2353},[177],{"categories":2355},[177],{"categories":2357},[],{"categories":2359},[150],{"categories":2361},[159],{"categories":2363},[177],{"categories":2365},[150],{"categories":2367},[159],{"categories":2369},[156],{"categories":2371},[156,159],{"categories":2373},[159],{"categories":2375},[471],{"categories":2377},[177],{"categories":2379},[177],{"categories":2381},[159],{"categories":2383},[156],{"categories":2385},[],{"categories":2387},[177],{"categories":2389},[214],{"categories":2391},[150],{"categories":2393},[156],{"categories":2395},[156],{"categories":2397},[],{"categories":2399},[126],{"categories":2401},[],{"categories":2403},[150],{"categories":2405},[159],{"categories":2407},[177],{"categories":2409},[156],{"categories":2411},[177],{"categories":2413},[150],{"categories":2415},[177],{"categories":2417},[177],{"categories":2419},[],{"categories":2421},[153],{"categories":2423},[159],{"categories":2425},[177],{"categories":2427},[177],{"categories":2429},[177],{"categories":2431},[177],{"categories":2433},[177],{"categories":2435},[177],{"categories":2437},[177],{"categories":2439},[177],{"categories":2441},[177],{"categories":2443},[177],{"categories":2445},[201],{"categories":2447},[150],{"categories":2449},[156],{"categories":2451},[156],{"categories":2453},[],{"categories":2455},[156,150],{"categories":2457},[],{"categories":2459},[159],{"categories":2461},[177],{"categories":2463},[159],{"categories":2465},[156],{"categories":2467},[156],{"categories":2469},[156],{"categories":2471},[156],{"categories":2473},[156],{"categories":2475},[159],{"categories":2477},[153],{"categories":2479},[198],{"categories":2481},[177],{"categories":2483},[156],{"categories":2485},[],{"categories":2487},[],{"categories":2489},[159],{"categories":2491},[198],{"categories":2493},[156],{"categories":2495},[],{"categories":2497},[],{"categories":2499},[214],{"categories":2501},[156],{"categories":2503},[],{"categories":2505},[],{"categories":2507},[150],{"categories":2509},[153],{"categories":2511},[156],{"categories":2513},[153],{"categories":2515},[198],{"categories":2517},[],{"categories":2519},[177],{"categories":2521},[],{"categories":2523},[198],{"categories":2525},[156],{"categories":2527},[214],{"categories":2529},[],{"categories":2531},[214],{"categories":2533},[],{"categories":2535},[],{"categories":2537},[159],{"categories":2539},[],{"categories":2541},[153],{"categories":2543},[150],{"categories":2545},[198],{"categories":2547},[126],{"categories":2549},[],{"categories":2551},[],{"categories":2553},[156],{"categories":2555},[150],{"categories":2557},[214],{"categories":2559},[],{"categories":2561},[159],{"categories":2563},[159],{"categories":2565},[177],{"categories":2567},[156],{"categories":2569},[159],{"categories":2571},[156],{"categories":2573},[159],{"categories":2575},[156],{"categories":2577},[162],{"categories":2579},[177],{"categories":2581},[],{"categories":2583},[214],{"categories":2585},[126],{"categories":2587},[159],{"categories":2589},[],{"categories":2591},[156],{"categories":2593},[159],{"categories":2595},[153],{"categories":2597},[150],{"categories":2599},[156],{"categories":2601},[198],{"categories":2603},[126],{"categories":2605},[126],{"categories":2607},[156],{"categories":2609},[201],{"categories":2611},[156],{"categories":2613},[159],{"categories":2615},[153],{"categories":2617},[159],{"categories":2619},[156],{"categories":2621},[156],{"categories":2623},[159],{"categories":2625},[177],{"categories":2627},[],{"categories":2629},[150],{"categories":2631},[156],{"categories":2633},[159],{"categories":2635},[156],{"categories":2637},[156],{"categories":2639},[],{"categories":2641},[198],{"categories":2643},[153],{"categories":2645},[177],{"categories":2647},[156],{"categories":2649},[156],{"categories":2651},[198],{"categories":2653},[214],{"categories":2655},[201],{"categories":2657},[156],{"categories":2659},[177],{"categories":2661},[156],{"categories":2663},[159],{"categories":2665},[471],{"categories":2667},[156],{"categories":2669},[159],{"categories":2671},[201],{"categories":2673},[],{"categories":2675},[159],{"categories":2677},[126],{"categories":2679},[198],{"categories":2681},[156],{"categories":2683},[150],{"categories":2685},[153],{"categories":2687},[126],{"categories":2689},[],{"categories":2691},[159],{"categories":2693},[156],{"categories":2695},[],{"categories":2697},[177],{"categories":2699},[],{"categories":2701},[177],{"categories":2703},[156],{"categories":2705},[159],{"categories":2707},[159],{"categories":2709},[159],{"categories":2711},[],{"categories":2713},[],{"categories":2715},[156],{"categories":2717},[156],{"categories":2719},[],{"categories":2721},[198],{"categories":2723},[159],{"categories":2725},[214],{"categories":2727},[150],{"categories":2729},[],{"categories":2731},[],{"categories":2733},[177],{"categories":2735},[126],{"categories":2737},[156],{"categories":2739},[156],{"categories":2741},[156],{"categories":2743},[126],{"categories":2745},[177],{"categories":2747},[198],{"categories":2749},[156],{"categories":2751},[156],{"categories":2753},[156],{"categories":2755},[177],{"categories":2757},[156],{"categories":2759},[177],{"categories":2761},[159],{"categories":2763},[159],{"categories":2765},[126],{"categories":2767},[159],{"categories":2769},[156],{"categories":2771},[126],{"categories":2773},[198],{"categories":2775},[],{"categories":2777},[159],{"categories":2779},[],{"categories":2781},[],{"categories":2783},[],{"categories":2785},[153],{"categories":2787},[156],{"categories":2789},[159],{"categories":2791},[150],{"categories":2793},[159],{"categories":2795},[214],{"categories":2797},[],{"categories":2799},[159],{"categories":2801},[],{"categories":2803},[150],{"categories":2805},[159],{"categories":2807},[],{"categories":2809},[159],{"categories":2811},[156],{"categories":2813},[177],{"categories":2815},[156],{"categories":2817},[159],{"categories":2819},[177],{"categories":2821},[159],{"categories":2823},[126],{"categories":2825},[198],{"categories":2827},[150],{"categories":2829},[],{"categories":2831},[159],{"categories":2833},[198],{"categories":2835},[471],{"categories":2837},[177],{"categories":2839},[156],{"categories":2841},[198],{"categories":2843},[150],{"categories":2845},[],{"categories":2847},[159],{"categories":2849},[159],{"categories":2851},[156],{"categories":2853},[],{"categories":2855},[159],{"categories":2857},[162],{"categories":2859},[177],{"categories":2861},[159],{"categories":2863},[153],{"categories":2865},[],{"categories":2867},[156],{"categories":2869},[162],{"categories":2871},[156],{"categories":2873},[159],{"categories":2875},[177],{"categories":2877},[150],{"categories":2879},[471],{"categories":2881},[156],{"categories":2883},[156],{"categories":2885},[156],{"categories":2887},[177],{"categories":2889},[153],{"categories":2891},[156],{"categories":2893},[198],{"categories":2895},[177],{"categories":2897},[471],{"categories":2899},[156],{"categories":2901},[],{"categories":2903},[],{"categories":2905},[471],{"categories":2907},[201],{"categories":2909},[159],{"categories":2911},[159],{"categories":2913},[177],{"categories":2915},[156],{"categories":2917},[150],{"categories":2919},[198],{"categories":2921},[159],{"categories":2923},[156],{"categories":2925},[214],{"categories":2927},[156],{"categories":2929},[159],{"categories":2931},[],{"categories":2933},[156],{"categories":2935},[156],{"categories":2937},[177],{"categories":2939},[150],{"categories":2941},[],{"categories":2943},[156],{"categories":2945},[156],{"categories":2947},[126],{"categories":2949},[198],{"categories":2951},[156,159],{"categories":2953},[214,153],{"categories":2955},[156],{"categories":2957},[],{"categories":2959},[159],{"categories":2961},[],{"categories":2963},[126],{"categories":2965},[156],{"categories":2967},[177],{"categories":2969},[],{"categories":2971},[159],{"categories":2973},[],{"categories":2975},[198],{"categories":2977},[159],{"categories":2979},[150],{"categories":2981},[159],{"categories":2983},[156],{"categories":2985},[471],{"categories":2987},[214],{"categories":2989},[153],{"categories":2991},[153],{"categories":2993},[150],{"categories":2995},[150],{"categories":2997},[156],{"categories":2999},[159],{"categories":3001},[156],{"categories":3003},[156],{"categories":3005},[150],{"categories":3007},[156],{"categories":3009},[214],{"categories":3011},[177],{"categories":3013},[156],{"categories":3015},[159],{"categories":3017},[156],{"categories":3019},[],{"categories":3021},[126],{"categories":3023},[],{"categories":3025},[159],{"categories":3027},[150],{"categories":3029},[],{"categories":3031},[471],{"categories":3033},[156],{"categories":3035},[],{"categories":3037},[177],{"categories":3039},[159],{"categories":3041},[126],{"categories":3043},[156],{"categories":3045},[159],{"categories":3047},[126],{"categories":3049},[159],{"categories":3051},[177],{"categories":3053},[150],{"categories":3055},[177],{"categories":3057},[126],{"categories":3059},[156],{"categories":3061},[198],{"categories":3063},[156],{"categories":3065},[156],{"categories":3067},[156],{"categories":3069},[156],{"categories":3071},[159],{"categories":3073},[156],{"categories":3075},[159],{"categories":3077},[156],{"categories":3079},[150],{"categories":3081},[156],{"categories":3083},[159],{"categories":3085},[198],{"categories":3087},[150],{"categories":3089},[159],{"categories":3091},[198],{"categories":3093},[],{"categories":3095},[156],{"categories":3097},[156],{"categories":3099},[126],{"categories":3101},[],{"categories":3103},[159],{"categories":3105},[214],{"categories":3107},[156],{"categories":3109},[177],{"categories":3111},[214],{"categories":3113},[159],{"categories":3115},[153],{"categories":3117},[153],{"categories":3119},[156],{"categories":3121},[150],{"categories":3123},[],{"categories":3125},[156],{"categories":3127},[],{"categories":3129},[150],{"categories":3131},[156],{"categories":3133},[159],{"categories":3135},[159],{"categories":3137},[],{"categories":3139},[126],{"categories":3141},[126],{"categories":3143},[214],{"categories":3145},[198],{"categories":3147},[],{"categories":3149},[156],{"categories":3151},[150],{"categories":3153},[156],{"categories":3155},[126],{"categories":3157},[150],{"categories":3159},[177],{"categories":3161},[177],{"categories":3163},[],{"categories":3165},[177],{"categories":3167},[159],{"categories":3169},[198],{"categories":3171},[201],{"categories":3173},[156],{"categories":3175},[],{"categories":3177},[177],{"categories":3179},[126],{"categories":3181},[153],{"categories":3183},[156],{"categories":3185},[150],{"categories":3187},[471],{"categories":3189},[150],{"categories":3191},[],{"categories":3193},[],{"categories":3195},[177],{"categories":3197},[],{"categories":3199},[159],{"categories":3201},[159],{"categories":3203},[159],{"categories":3205},[],{"categories":3207},[156],{"categories":3209},[],{"categories":3211},[177],{"categories":3213},[150],{"categories":3215},[198],{"categories":3217},[156],{"categories":3219},[177],{"categories":3221},[177],{"categories":3223},[],{"categories":3225},[177],{"categories":3227},[150],{"categories":3229},[156],{"categories":3231},[],{"categories":3233},[159],{"categories":3235},[159],{"categories":3237},[150],{"categories":3239},[],{"categories":3241},[],{"categories":3243},[],{"categories":3245},[198],{"categories":3247},[159],{"categories":3249},[156],{"categories":3251},[],{"categories":3253},[],{"categories":3255},[],{"categories":3257},[198],{"categories":3259},[],{"categories":3261},[150],{"categories":3263},[],{"categories":3265},[],{"categories":3267},[198],{"categories":3269},[156],{"categories":3271},[177],{"categories":3273},[],{"categories":3275},[214],{"categories":3277},[177],{"categories":3279},[214],{"categories":3281},[156],{"categories":3283},[],{"categories":3285},[],{"categories":3287},[159],{"categories":3289},[],{"categories":3291},[],{"categories":3293},[159],{"categories":3295},[156],{"categories":3297},[],{"categories":3299},[159],{"categories":3301},[177],{"categories":3303},[214],{"categories":3305},[201],{"categories":3307},[159],{"categories":3309},[159],{"categories":3311},[],{"categories":3313},[],{"categories":3315},[],{"categories":3317},[177],{"categories":3319},[],{"categories":3321},[],{"categories":3323},[198],{"categories":3325},[150],{"categories":3327},[],{"categories":3329},[153],{"categories":3331},[214],{"categories":3333},[156],{"categories":3335},[126],{"categories":3337},[150],{"categories":3339},[201],{"categories":3341},[153],{"categories":3343},[126],{"categories":3345},[],{"categories":3347},[],{"categories":3349},[159],{"categories":3351},[150],{"categories":3353},[198],{"categories":3355},[150],{"categories":3357},[159],{"categories":3359},[471],{"categories":3361},[159],{"categories":3363},[],{"categories":3365},[156],{"categories":3367},[177],{"categories":3369},[126],{"categories":3371},[],{"categories":3373},[198],{"categories":3375},[177],{"categories":3377},[150],{"categories":3379},[159],{"categories":3381},[156],{"categories":3383},[153],{"categories":3385},[159,471],{"categories":3387},[159],{"categories":3389},[126],{"categories":3391},[156],{"categories":3393},[201],{"categories":3395},[214],{"categories":3397},[159],{"categories":3399},[],{"categories":3401},[159],{"categories":3403},[156],{"categories":3405},[153],{"categories":3407},[],{"categories":3409},[],{"categories":3411},[156],{"categories":3413},[201],{"categories":3415},[156],{"categories":3417},[],{"categories":3419},[177],{"categories":3421},[],{"categories":3423},[177],{"categories":3425},[126],{"categories":3427},[159],{"categories":3429},[156],{"categories":3431},[214],{"categories":3433},[126],{"categories":3435},[],{"categories":3437},[177],{"categories":3439},[156],{"categories":3441},[],{"categories":3443},[156],{"categories":3445},[159],{"categories":3447},[156],{"categories":3449},[159],{"categories":3451},[156],{"categories":3453},[156],{"categories":3455},[156],{"categories":3457},[156],{"categories":3459},[153],{"categories":3461},[],{"categories":3463},[162],{"categories":3465},[177],{"categories":3467},[156],{"categories":3469},[],{"categories":3471},[126],{"categories":3473},[156],{"categories":3475},[156],{"categories":3477},[159],{"categories":3479},[177],{"categories":3481},[156],{"categories":3483},[156],{"categories":3485},[153],{"categories":3487},[159],{"categories":3489},[198],{"categories":3491},[],{"categories":3493},[201],{"categories":3495},[156],{"categories":3497},[],{"categories":3499},[177],{"categories":3501},[214],{"categories":3503},[],{"categories":3505},[],{"categories":3507},[177],{"categories":3509},[177],{"categories":3511},[214],{"categories":3513},[150],{"categories":3515},[159],{"categories":3517},[159],{"categories":3519},[156],{"categories":3521},[153],{"categories":3523},[],{"categories":3525},[],{"categories":3527},[177],{"categories":3529},[201],{"categories":3531},[126],{"categories":3533},[159],{"categories":3535},[198],{"categories":3537},[201],{"categories":3539},[201],{"categories":3541},[],{"categories":3543},[177],{"categories":3545},[156],{"categories":3547},[156],{"categories":3549},[126],{"categories":3551},[],{"categories":3553},[177],{"categories":3555},[177],{"categories":3557},[177],{"categories":3559},[],{"categories":3561},[159],{"categories":3563},[156],{"categories":3565},[],{"categories":3567},[150],{"categories":3569},[153],{"categories":3571},[],{"categories":3573},[156],{"categories":3575},[156],{"categories":3577},[],{"categories":3579},[126],{"categories":3581},[],{"categories":3583},[],{"categories":3585},[],{"categories":3587},[],{"categories":3589},[156],{"categories":3591},[177],{"categories":3593},[],{"categories":3595},[],{"categories":3597},[156],{"categories":3599},[156],{"categories":3601},[156],{"categories":3603},[201],{"categories":3605},[156],{"categories":3607},[201],{"categories":3609},[],{"categories":3611},[201],{"categories":3613},[201],{"categories":3615},[471],{"categories":3617},[159],{"categories":3619},[126],{"categories":3621},[],{"categories":3623},[],{"categories":3625},[201],{"categories":3627},[126],{"categories":3629},[126],{"categories":3631},[126],{"categories":3633},[],{"categories":3635},[150],{"categories":3637},[126],{"categories":3639},[126],{"categories":3641},[150],{"categories":3643},[126],{"categories":3645},[153],{"categories":3647},[126],{"categories":3649},[126],{"categories":3651},[126],{"categories":3653},[201],{"categories":3655},[177],{"categories":3657},[177],{"categories":3659},[156],{"categories":3661},[126],{"categories":3663},[201],{"categories":3665},[471],{"categories":3667},[201],{"categories":3669},[201],{"categories":3671},[201],{"categories":3673},[],{"categories":3675},[153],{"categories":3677},[],{"categories":3679},[471],{"categories":3681},[126],{"categories":3683},[126],{"categories":3685},[126],{"categories":3687},[159],{"categories":3689},[177,153],{"categories":3691},[201],{"categories":3693},[],{"categories":3695},[],{"categories":3697},[201],{"categories":3699},[],{"categories":3701},[201],{"categories":3703},[177],{"categories":3705},[159],{"categories":3707},[],{"categories":3709},[126],{"categories":3711},[156],{"categories":3713},[198],{"categories":3715},[],{"categories":3717},[156],{"categories":3719},[],{"categories":3721},[177],{"categories":3723},[150],{"categories":3725},[201],{"categories":3727},[],{"categories":3729},[126],{"categories":3731},[177],[3733,3805,3904,4148],{"id":3734,"title":3735,"ai":3736,"body":3741,"categories":3770,"created_at":127,"date_modified":127,"description":119,"extension":128,"faq":127,"featured":129,"kicker_label":127,"meta":3771,"navigation":131,"path":3792,"published_at":3793,"question":127,"scraped_at":3794,"seo":3795,"sitemap":3796,"source_id":3797,"source_name":3798,"source_type":138,"source_url":3799,"stem":3800,"tags":3801,"thumbnail_url":127,"tldr":3802,"tweet":127,"unknown_tags":3803,"__hash__":3804},"summaries\u002Fsummaries\u002F0d1957d00ad6e7e2-gpu-bandwidth-limits-llm-speed-not-flops-summary.md","GPU Bandwidth Limits LLM Speed, Not FLOPS",{"provider":7,"model":8,"input_tokens":3737,"output_tokens":3738,"processing_time_ms":3739,"cost_usd":3740},8371,1988,22871,0.00264555,{"type":14,"value":3742,"toc":3766},[3743,3747,3750,3753,3756,3760,3763],[17,3744,3746],{"id":3745},"throughput-design-hides-latency-with-massive-parallelism","Throughput Design Hides Latency with Massive Parallelism",[22,3748,3749],{},"GPUs prioritize throughput over single-thread latency by allocating transistors to thousands of execution units and a large register file rather than branch predictors or deep caches. A single GPU thread is slower than a CPU core (~1ns instruction), but 20,000+ run concurrently. Off-chip HBM access takes 700+ cycles on H100, so GPUs hide this by keeping enough independent warps ready—switching when one stalls. This requires high occupancy: ratio of resident warps to max (64 per H100 SM). Low occupancy from high register use (e.g., 128 regs\u002Fthread limits to 512 threads\u002FSM or 16 warps, 25% occupancy) starves the scheduler, collapsing throughput despite saturated Tensor Cores.",[22,3751,3752],{},"Threads group into 32-thread warps as the scheduling unit under SIMT: hardware issues one instruction across the warp while tracking per-thread PCs and registers for independent appearance. Pre-Volta lockstep caused deadlocks on intra-warp sync; Volta+ Independent Thread Scheduling (ITS) dynamically regroups converging threads, enabling mutexes without divergence penalties (though divergence still serializes paths, doubling time on 50\u002F50 if\u002Felse). H100 SMs (132 total) divide into 4 quadrants, each with warp scheduler, 16k registers, 32 FP32\u002F16 INT32 cores, 1 Tensor Core, and L0 instr cache. Blocks (CTAs) run on one SM for shared mem sync; Hopper clusters co-schedule blocks across GPCs for DSMEM (7x faster than global mem).",[22,3754,3755],{},"Warp divergence hurts irregular data (e.g., padding branches); fix via specialization—e.g., FlashAttention-3 assigns producer warps for loads, consumers for math, zero divergence, overlapping mem\u002Fcompute. Little’s Law quantifies: in-flight warps = throughput × latency. For 400-cycle HBM loads at 1 instr\u002Fcycle, need 400+ warps to sustain SM utilization; fewer drops throughput to 25%.",[17,3757,3759],{"id":3758},"six-tier-memory-hierarchy-sets-bandwidth-bounds","Six-Tier Memory Hierarchy Sets Bandwidth Bounds",[22,3761,3762],{},"Data tiers trade capacity\u002Fbandwidth\u002Flatency: registers (256KB\u002FSM, 65k 32-bit, 1-cycle) > shared\u002FL1 (228KB shared max, 30-40 cycles) > L2 (50MB, 258-743 cycles) > HBM3 (80GB, 3.35TB\u002Fs, 700+ cycles) > NVLink (900GB\u002Fs\u002FGPU, µs) > NVMe. Keep working set close: high regs\u002Fthread (>255) spills to HBM local mem, killing loops. Shared mem tiles inputs for reuse (GEMM loads slab once, computes multiple times). L1 coalesces warp loads (base+i patterns >> strided). L2 absorbs weight re-reads; >50MB spills to HBM.",[22,3764,3765],{},"LLM decode exemplifies: 70B FP16 model needs 140GB\u002Ftoken read (42ms at 3.35TB\u002Fs pre-compute), one FLOP\u002Fbyte. Bandwidth binds because arithmetic intensity (FLOPs\u002Fbyte) is ~1; roofline (part 2) shows compute underutilized without high reuse. HBM holds weights\u002FKV\u002Factivations; misses from upper tiers thrash it. NVLink shards large models (e.g., tensor parallel syncs partials), but frequent comm bottlenecks vs. pipeline parallel (activations\u002Flayer).",{"title":119,"searchDepth":120,"depth":120,"links":3767},[3768,3769],{"id":3745,"depth":120,"text":3746},{"id":3758,"depth":120,"text":3759},[156],{"content_references":3772,"triage":3787},[3773,3778,3782],{"type":3774,"title":3775,"author":3776,"context":3777},"paper","FlashAttention-3","Shah et al.","cited",{"type":3774,"title":3779,"author":3780,"publisher":3781,"context":3777},"Microbenchmarks of the Hopper architecture","Luo et al.","2025",{"type":3783,"title":3784,"author":3785,"context":3786},"other","NVIDIA’s Hopper architecture documentation","NVIDIA","mentioned",{"relevance":3788,"novelty":3788,"quality":3789,"actionability":120,"composite":3790,"reasoning":3791},3,4,3.05,"Category: AI & LLMs. The article discusses GPU architecture and its implications for LLM performance, which is relevant to AI product builders. However, while it provides insights into GPU memory bandwidth, it lacks concrete actionable steps for implementing this knowledge in product development.","\u002Fsummaries\u002F0d1957d00ad6e7e2-gpu-bandwidth-limits-llm-speed-not-flops-summary","2026-05-06 02:50:10","2026-05-06 16:13:45",{"title":3735,"description":119},{"loc":3792},"0d1957d00ad6e7e2","Towards AI","https:\u002F\u002Fpub.towardsai.net\u002Fwarps-memory-hierarchy-and-why-bandwidth-beats-flops-how-gpus-actually-work-part-1-06170834ad33?source=rss----98111c9905da---4","summaries\u002F0d1957d00ad6e7e2-gpu-bandwidth-limits-llm-speed-not-flops-summary",[143,142],"Generating one token from a 70B model on H100 needs 140GB weight reads—one op per byte—making memory bandwidth the inference bottleneck, not compute throughput.",[],"OXBz1imk9itxNT8ySnee4POT_2AlsDS3zHL4klRnIMo",{"id":3806,"title":3807,"ai":3808,"body":3813,"categories":3892,"created_at":127,"date_modified":127,"description":119,"extension":128,"faq":127,"featured":129,"kicker_label":127,"meta":3893,"navigation":131,"path":3894,"published_at":3895,"question":127,"scraped_at":127,"seo":3896,"sitemap":3897,"source_id":3898,"source_name":3798,"source_type":138,"source_url":139,"stem":3899,"tags":3900,"thumbnail_url":127,"tldr":3901,"tweet":127,"unknown_tags":3902,"__hash__":3903},"summaries\u002Fsummaries\u002Fword2vec-turning-word-neighborhoods-into-embedding-summary.md","Word2Vec: Turning Word Neighborhoods into Embeddings",{"provider":7,"model":8,"input_tokens":3809,"output_tokens":3810,"processing_time_ms":3811,"cost_usd":3812},8588,1873,21956,0.0026316,{"type":14,"value":3814,"toc":3886},[3815,3819,3835,3838,3842,3849,3852,3863,3867,3870,3873,3876,3880,3883],[17,3816,3818],{"id":3817},"shift-from-isolated-ids-to-relational-embeddings","Shift from Isolated IDs to Relational Embeddings",[22,3820,3821,3822,3826,3827,3830,3831,3834],{},"Before Word2Vec, words were treated as unique IDs or one-hot vectors (e.g., cat → ",[3823,3824,3825],"span",{},"1,0,0,0,0","), preserving identity but ignoring relationships like 'cat' closer to 'dog' than 'engine'. Word2Vec flips this by learning dense vectors where meaning emerges from context: a word's vector is shaped by its repeated local neighborhoods in text. For a tiny corpus ('the cat drinks milk', 'the dog drinks water'), 'cat' appears near 'the', 'drinks', 'milk', 'chases', 'mouse', while 'dog' shares 'the', 'drinks', 'chases' but differs on 'water', 'ball'. Similar contexts deliver matching gradient signals during training, pulling vectors like cat ",[3823,3828,3829],{},"0.82, 0.21, -0.05"," and dog ",[3823,3832,3833],{},"0.79, 0.25, -0.03"," into nearby regions, enabling geometric analogies like king - man + woman ≈ queen.",[22,3836,3837],{},"This relational view—words as positions in a space preserving structure—outperforms sparse representations because similar training pressures from neighborhoods create clustered embeddings without explicit semantic rules.",[17,3839,3841],{"id":3840},"cbow-vs-skip-gram-dual-paths-to-context-prediction","CBOW vs Skip-gram: Dual Paths to Context Prediction",[22,3843,3844,3845,3848],{},"Word2Vec optimizes dense vectors (e.g., size 3 for vocab of 9) via a simple network: one-hot input (size 9) → hidden layer (size 3) → output scores (size 9). The hidden weights form the embedding table, where each word's row (e.g., initial cat ",[3823,3846,3847],{},"0.11, -0.08, 0.05",") gets refined.",[22,3850,3851],{},"CBOW predicts center from context (input: 'the', 'drinks' → target: 'cat'), treating surroundings as clues that constrain word identity, like recovering a word from its situational fit. Skip-gram reverses it (input: 'cat' → targets: 'the', 'drinks'), capturing a word's relational footprint—what neighbors it generates. With window size 1, Skip-gram generates pairs like cat → the, cat → drinks; CBOW inverts them.",[22,3853,3854,3855,3858,3859,3862],{},"Both unify around mutual definition: context shapes word (CBOW), word shapes context (Skip-gram). Skip-gram excels for rare words by amplifying their signal; CBOW smooths frequent ones. Together, they force embeddings to encode predictive utility, yielding a map where milk ",[3823,3856,3857],{},"0.10, 0.88, -0.12"," clusters near water ",[3823,3860,3861],{},"0.07, 0.84, -0.10",".",[17,3864,3866],{"id":3865},"training-mechanics-gradients-sculpt-the-space","Training Mechanics: Gradients Sculpt the Space",[22,3868,3869],{},"Training slides a window over text, generating examples (e.g., center 'cat' with contexts 'the', 'drinks'). For Skip-gram on cat → the: retrieve cat's vector, compute output scores (e.g., the: 0.12 → softmax prob 0.20), measure error against target, backpropagate to nudge weights—pulling cat closer to 'the', pushing from negatives like 'engine'.",[22,3871,3872],{},"Negative sampling scales this: for cat → drinks, attract to true pair, repel 3-5 random fakes (e.g., 'banana', 'cloud'), forming geometry via affinity (pet\u002Faction contexts) and boundaries (unrelated ones). Repeated across corpus, similar contexts yield parallel updates: cat and dog, both near 'the\u002Fdrinks\u002Fchases', converge without semantic labels.",[22,3874,3875],{},"Outcome: random initials become relational map. Training builds it via 'enormous tiny corrections'; full process turns prediction errors into stable positions.",[17,3877,3879],{"id":3878},"inference-and-limitations-in-modern-context","Inference and Limitations in Modern Context",[22,3881,3882],{},"Post-training, discard the predictor; use the embedding matrix for lookups (cat's vector), similarity (cosine distance clusters cat\u002Fdog over cat\u002Fengine), averaging for sentences ('the cat drinks milk' → mean vector), or downstream tasks like classification.",[22,3884,3885],{},"Word2Vec revolutionized NLP by proving prediction yields emergent semantics, replacing hand-engineered features with learned geometry. Yet static vectors fail polysemy ('bank' as river\u002Ffinance gets one embedding), spurring contextual models like BERT. Legacy: modern LLMs inherit context-driven, relational meaning—embeddings as vectors first, structure second.",{"title":119,"searchDepth":120,"depth":120,"links":3887},[3888,3889,3890,3891],{"id":3817,"depth":120,"text":3818},{"id":3840,"depth":120,"text":3841},{"id":3865,"depth":120,"text":3866},{"id":3878,"depth":120,"text":3879},[],{},"\u002Fsummaries\u002Fword2vec-turning-word-neighborhoods-into-embedding-summary","2026-04-08 21:21:21",{"title":3807,"description":119},{"loc":3894},"2165d09f4254bef0","summaries\u002Fword2vec-turning-word-neighborhoods-into-embedding-summary",[143,142],"Word2Vec learns dense word vectors by predicting local contexts with CBOW or Skip-gram, clustering similar words like 'cat' and 'dog' via repeated gradient updates from shared neighborhoods.",[],"6VqxuTzkcylmMleWNUuTyJeef_Ufd7syKMvOUkR5RDE",{"id":3905,"title":3906,"ai":3907,"body":3912,"categories":4136,"created_at":127,"date_modified":127,"description":119,"extension":128,"faq":127,"featured":129,"kicker_label":127,"meta":4137,"navigation":131,"path":4138,"published_at":133,"question":127,"scraped_at":127,"seo":4139,"sitemap":4140,"source_id":4141,"source_name":137,"source_type":138,"source_url":139,"stem":4142,"tags":4143,"thumbnail_url":127,"tldr":4145,"tweet":127,"unknown_tags":4146,"__hash__":4147},"summaries\u002Fsummaries\u002Fbatch-gemms-for-fast-lstm-in-torch-summary.md","Batch GEMMs for Fast LSTM in Torch",{"provider":7,"model":8,"input_tokens":3908,"output_tokens":3909,"processing_time_ms":3910,"cost_usd":3911},4084,1694,14015,0.00164115,{"type":14,"value":3913,"toc":4131},[3914,3918,3921,3931,3935,3938,3981,3984,4116,4120,4127],[17,3915,3917],{"id":3916},"batch-gemms-to-cut-lstm-overhead","Batch GEMMs to Cut LSTM Overhead",[22,3919,3920],{},"Standard Torch LSTMs compute input (i2h) and hidden (h2h) projections separately, doubling GEMM calls and kernel launch overhead. This gist fuses them: compute i2h + h2h in one 4x wider GEMM (gates i,f,o,c), then slice for sigmoid\u002Ftanh. Result: single GEMM pass per timestep, 2-3x faster on GPU for char-level models (as in Karpathy's Python LSTM gist). Trade-off: fixed rnn_size, no peepholes, Lua-only (Torch7).",[22,3922,3923,3924,3927,3928,3862],{},"Usage: ",[26,3925,3926],{},"m = LSTM.fast_lstm(input_size, rnn_size)"," returns gModule({x, prev_c, prev_h}, {next_c, next_h}). Feed sequences by unrolling: ",[26,3929,3930],{},"for t=1,T do h,c = m:forward({x[t], c, h}) end",[17,3932,3934],{"id":3933},"gate-computation-graph","Gate Computation Graph",[22,3936,3937],{},"Builds nn.gModule with:",[57,3939,3940,3954,3961,3968,3975],{},[60,3941,3942,3945,3946,3949,3950,3953],{},[26,3943,3944],{},"i2h = nn.Linear(input_size, 4*rnn_size)(x)"," + ",[26,3947,3948],{},"h2h = nn.Linear(rnn_size, 4*rnn_size)(prev_h)"," → ",[26,3951,3952],{},"all_input_sums = nn.CAddTable()({i2h, h2h})"," (batched gates).",[60,3955,3956,3957,3960],{},"Sigmoid chunk: ",[26,3958,3959],{},"nn.Narrow(2,1,3*rnn_size)(all_input_sums)"," → gates i,f,o.",[60,3962,3963,3964,3967],{},"Input transform: ",[26,3965,3966],{},"nn.Narrow(2,3*rnn_size+1,rnn_size)(all_input_sums)"," → tanh(c~).",[60,3969,3970,3971,3974],{},"Cell: ",[26,3972,3973],{},"next_c = forget_gate ⊙ prev_c + in_gate ⊙ c~"," (CMulTable + CAddTable).",[60,3976,3977,3978,3862],{},"Hidden: ",[26,3979,3980],{},"next_h = out_gate ⊙ tanh(next_c)",[22,3982,3983],{},"Full code:",[3985,3986,3990],"pre",{"className":3987,"code":3988,"language":3989,"meta":119,"style":119},"language-lua shiki shiki-themes github-light github-dark","function LSTM.fast_lstm(input_size, rnn_size)\n  local x = nn.Identity()()\n  local prev_c = nn.Identity()()\n  local prev_h = nn.Identity()()\n  local i2h = nn.Linear(input_size, 4 * rnn_size)(x)\n  local h2h = nn.Linear(rnn_size, 4 * rnn_size)(prev_h)\n  local all_input_sums = nn.CAddTable()({i2h, h2h})\n  local sigmoid_chunk = nn.Narrow(2, 1, 3 * rnn_size)(all_input_sums)\n  sigmoid_chunk = nn.Sigmoid()(sigmoid_chunk)\n  local in_gate = nn.Narrow(2, 1, rnn_size)(sigmoid_chunk)\n  local forget_gate = nn.Narrow(2, rnn_size + 1, rnn_size)(sigmoid_chunk)\n  local out_gate = nn.Narrow(2, 2 * rnn_size + 1, rnn_size)(sigmoid_chunk)\n  local in_transform = nn.Narrow(2, 3 * rnn_size + 1, rnn_size)(all_input_sums)\n  in_transform = nn.Tanh()(in_transform)\n  local next_c = nn.CAddTable()({\n    nn.CMulTable()({forget_gate, prev_c}),\n    nn.CMulTable()({in_gate, in_transform})\n  })\n  local next_h = nn.CMulTable()({out_gate, nn.Tanh()(next_c)})\n  return nn.gModule({x, prev_c, prev_h}, {next_c, next_h})\nend\n","lua",[26,3991,3992,3999,4004,4009,4014,4020,4026,4032,4038,4044,4050,4056,4062,4068,4074,4080,4086,4092,4098,4104,4110],{"__ignoreMap":119},[3823,3993,3996],{"class":3994,"line":3995},"line",1,[3823,3997,3998],{},"function LSTM.fast_lstm(input_size, rnn_size)\n",[3823,4000,4001],{"class":3994,"line":120},[3823,4002,4003],{},"  local x = nn.Identity()()\n",[3823,4005,4006],{"class":3994,"line":3788},[3823,4007,4008],{},"  local prev_c = nn.Identity()()\n",[3823,4010,4011],{"class":3994,"line":3789},[3823,4012,4013],{},"  local prev_h = nn.Identity()()\n",[3823,4015,4017],{"class":3994,"line":4016},5,[3823,4018,4019],{},"  local i2h = nn.Linear(input_size, 4 * rnn_size)(x)\n",[3823,4021,4023],{"class":3994,"line":4022},6,[3823,4024,4025],{},"  local h2h = nn.Linear(rnn_size, 4 * rnn_size)(prev_h)\n",[3823,4027,4029],{"class":3994,"line":4028},7,[3823,4030,4031],{},"  local all_input_sums = nn.CAddTable()({i2h, h2h})\n",[3823,4033,4035],{"class":3994,"line":4034},8,[3823,4036,4037],{},"  local sigmoid_chunk = nn.Narrow(2, 1, 3 * rnn_size)(all_input_sums)\n",[3823,4039,4041],{"class":3994,"line":4040},9,[3823,4042,4043],{},"  sigmoid_chunk = nn.Sigmoid()(sigmoid_chunk)\n",[3823,4045,4047],{"class":3994,"line":4046},10,[3823,4048,4049],{},"  local in_gate = nn.Narrow(2, 1, rnn_size)(sigmoid_chunk)\n",[3823,4051,4053],{"class":3994,"line":4052},11,[3823,4054,4055],{},"  local forget_gate = nn.Narrow(2, rnn_size + 1, rnn_size)(sigmoid_chunk)\n",[3823,4057,4059],{"class":3994,"line":4058},12,[3823,4060,4061],{},"  local out_gate = nn.Narrow(2, 2 * rnn_size + 1, rnn_size)(sigmoid_chunk)\n",[3823,4063,4065],{"class":3994,"line":4064},13,[3823,4066,4067],{},"  local in_transform = nn.Narrow(2, 3 * rnn_size + 1, rnn_size)(all_input_sums)\n",[3823,4069,4071],{"class":3994,"line":4070},14,[3823,4072,4073],{},"  in_transform = nn.Tanh()(in_transform)\n",[3823,4075,4077],{"class":3994,"line":4076},15,[3823,4078,4079],{},"  local next_c = nn.CAddTable()({\n",[3823,4081,4083],{"class":3994,"line":4082},16,[3823,4084,4085],{},"    nn.CMulTable()({forget_gate, prev_c}),\n",[3823,4087,4089],{"class":3994,"line":4088},17,[3823,4090,4091],{},"    nn.CMulTable()({in_gate, in_transform})\n",[3823,4093,4095],{"class":3994,"line":4094},18,[3823,4096,4097],{},"  })\n",[3823,4099,4101],{"class":3994,"line":4100},19,[3823,4102,4103],{},"  local next_h = nn.CMulTable()({out_gate, nn.Tanh()(next_c)})\n",[3823,4105,4107],{"class":3994,"line":4106},20,[3823,4108,4109],{},"  return nn.gModule({x, prev_c, prev_h}, {next_c, next_h})\n",[3823,4111,4113],{"class":3994,"line":4112},21,[3823,4114,4115],{},"end\n",[17,4117,4119],{"id":4118},"production-notes","Production Notes",[22,4121,4122,4123,4126],{},"From Karpathy (2015): Powers char-rnn models. Justin Johnson's tweaks batch everything. Scales to seq len 1000s on GTX 580-era GPUs. Modern PyTorch equiv: torch.nn.LSTM with ",[26,4124,4125],{},"bias=False"," + fused CUDA kernels (faster still). Port to Flux.jl or JAX for today, but graph fusion principle endures for custom RNNs.",[4128,4129,4130],"style",{},"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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":119,"searchDepth":120,"depth":120,"links":4132},[4133,4134,4135],{"id":3916,"depth":120,"text":3917},{"id":3933,"depth":120,"text":3934},{"id":4118,"depth":120,"text":4119},[126],{},"\u002Fsummaries\u002Fbatch-gemms-for-fast-lstm-in-torch-summary",{"title":3906,"description":119},{"loc":4138},"787da8618ae52246","summaries\u002Fbatch-gemms-for-fast-lstm-in-torch-summary",[143,142,4144],"coding","Fuse LSTM operations into nngraph module to batch 4 GEMMs, slashing overhead vs standard nn.LSTM (optimized by @jcjohnson).",[],"sB5VUvtL1vpsXKZbRH6Tr09LD-FOtuL5SeiLauwvqEI",{"id":4149,"title":4150,"ai":4151,"body":4156,"categories":4206,"created_at":127,"date_modified":127,"description":119,"extension":128,"faq":127,"featured":129,"kicker_label":127,"meta":4207,"navigation":131,"path":4208,"published_at":133,"question":127,"scraped_at":127,"seo":4209,"sitemap":4210,"source_id":4211,"source_name":137,"source_type":138,"source_url":139,"stem":4212,"tags":4213,"thumbnail_url":127,"tldr":4215,"tweet":127,"unknown_tags":4216,"__hash__":4217},"summaries\u002Fsummaries\u002Fpolicy-gradients-for-pong-100-line-rl-agent-summary.md","Policy Gradients for Pong: 100-Line RL Agent",{"provider":7,"model":8,"input_tokens":4152,"output_tokens":4153,"processing_time_ms":4154,"cost_usd":4155},12952,1480,13868,0.00286,{"type":14,"value":4157,"toc":4200},[4158,4162,4165,4168,4172,4179,4183,4190,4194,4197],[17,4159,4161],{"id":4160},"network-architecture-and-forwardbackward-passes","Network Architecture and Forward\u002FBackward Passes",[22,4163,4164],{},"Build a fully connected policy network with 200 ReLU hidden units: input is 80x80=6400D (binary diff frame), W1 (200x6400 Xavier init), ReLU, W2 (200x1), sigmoid for P(UP=action 2). Forward: h = ReLU(W1 @ x), p = sigmoid(W2 @ h). Sample action stochastically: UP if uniform() \u003C p else DOWN.",[22,4166,4167],{},"Backward computes policy gradient analytically. For episode: stack epx (inputs), eph (hiddens), epdlogp (y - p where y=1 for UP). dW2 = eph.T @ epdlogp. dh = epdlogp.outer(W2), zero ReLU grads (eph\u003C=0), dW1 = dh.T @ epx. Accumulate into grad_buffer over batch_size=10 episodes.",[17,4169,4171],{"id":4170},"image-preprocessing-for-atari-pong","Image Preprocessing for Atari Pong",[22,4173,4174,4175,4178],{},"Transform 210x160x3 uint8 frame: crop top\u002Fbottom to 160x80 (35:195), downsample 2x to 80x80 grayscale (I",[3823,4176,4177],{},"::2,::2,0","), binarize (set bg 144\u002F109=0, else=1), flatten to 6400D float. Use difference frames x = cur_x - prev_x (motion highlights ball\u002Fpaddles, zeros static bg). This reduces noise, enables end-to-end from pixels.",[17,4180,4182],{"id":4181},"reward-discounting-and-advantage-normalization","Reward Discounting and Advantage Normalization",[22,4184,4185,4186,4189],{},"Pong rewards: +1 win, -1 lose (sparse, at episode end). For trajectory drs: discount backwards with gamma=0.99, reset running sum at r",[3823,4187,4188],{},"t","!=0 (game boundaries). Standardize discounted_epr to mean=0, std=1 (controls gradient variance). Modulate: epdlogp *= discounted_epr (REINFORCE: grad log pi(a|s) * advantage).",[17,4191,4193],{"id":4192},"training-loop-and-optimization","Training Loop and Optimization",[22,4195,4196],{},"OpenAI Gym Pong-v0. Loop: prepro obs, forward policy, sample\u002Fact, record x\u002Fh\u002Fdlogp\u002Fr. On done: compute discounted\u002Fcentered advantages, backward, add to grad_buffer. Every 10 eps: RMSProp update (decay=0.99, lr=1e-4): g \u002F (sqrt(rms_cache) + 1e-5), reset buffer. Track running_reward (EWMA 0.99), save model every 100 eps. Render optional. Resume from save.p.",[22,4198,4199],{},"Prints episode rewards; agent learns to beat random policy quickly, human-level after ~1-2hr CPU (per blog link in comments).",{"title":119,"searchDepth":120,"depth":120,"links":4201},[4202,4203,4204,4205],{"id":4160,"depth":120,"text":4161},{"id":4170,"depth":120,"text":4171},{"id":4181,"depth":120,"text":4182},{"id":4192,"depth":120,"text":4193},[126],{},"\u002Fsummaries\u002Fpolicy-gradients-for-pong-100-line-rl-agent-summary",{"title":4150,"description":119},{"loc":4208},"7c1c3951efe2f58d","summaries\u002Fpolicy-gradients-for-pong-100-line-rl-agent-summary",[4214,143,142],"python","Train a 2-layer NN to play Atari Pong from raw pixels using REINFORCE policy gradients. Uses 80x80 binary diff frames, discounts rewards with gamma=0.99, standardizes advantages, RMSProp updates every 10 episodes. Converges on CPU in hours.",[],"6XMa-na9tAra5BBDuY7gL83XBVHrWa_0VpHOibbLrNQ"]