Files
Lance Martin 9db0818ec5 Update
2025-07-24 20:16:57 -07:00

3086 lines
863 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"attachments": {
"928a55e1-a9e2-48e0-a15c-b0badb9452dd.png": {
"image/png": "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QF4FCFTklZOVIYAAAggggAACCCCAAAIIIIAAAggggAACCCCAQBIBAhVJtJgXAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE8ipAoCKvnKwMAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEkggQqEiixbwIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQVwECFXnlZGUIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQRIBARRIt5kUAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIG8ChCoyCsnK0MAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIEkAgQqkmgxLwIIIIAAAggggAACCCCAAAIIIIAAAggggAACCORVgEBFXjlZGQIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCQRIFCRRIt5EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIK8CBCryysnKEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIIkAgYokWsyLAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACeRUgUJFXTlaGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACSQQIVCTRYl4EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDIqwCBirxysjIEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBIIkCgIokW8yKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBeBQhU5JWTlSGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEASAQIVSbSYFwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBPIqQKAir5ysDAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBJIIEKhIosW8CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggkFcBAhV55WRlCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggkESAQEUSLeZFAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBvArUy+vaSnRlC1asN0tW6f8Gs27D5hLdS3YLAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJIE2jarb7q3bWQa1afPQNT7WjGBisUr15uXxi42L3260ExduMYstkEJBSeWr9kYdfy8hgACCCCAAAIIIIAA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AAmQAAmQAAlkRYCGiqzI87wkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKGhgo+BCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAApkRoKEiM/Q8MQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAA0VfAZIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAQyI0BDRWboeWISIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEaKvgMkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZEaAhorM0PPEJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACNFTwGSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEsiMAA0VmaHniUmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABGio4DNAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQGQEaKjJDzxOTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnQUMFngARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIDMCNFRkhp4nJgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESaEAEJEAC+Sew/ltjlq5ca9bKj4b165kmjeqZBvU2yn/FWUMSIAESKAGBb6VNnLV4tZk8f6WZIv9Wr11vdt6iteneduMSnI1FkgAJkAAJkED5CEyYvcI8+N5Ms3LNerPfoHZmx81bG3b74/NfsXq9sFvnHSVzyykAAEAASURBVLBxw/pm44b1zEYcNsUHWIv2XLPuW/P0x3PMG+MWmEHdmpuDhnYwm7RsVIuukJdCAiRAArWPAA0Vte+e8ooqiMA6MTw89+k8c+/bM8zXc1eY9bBIiKyWThUUb6tkgALjhE1O2qWL+d2PNrNt4joSIAESqDUE0AS+/eVC8/jI2WbsjGVmyoJVZsGyNdbr69e5mXn6nCGmaaP61u1cSQIkQAIkQAJ5JnDZkxPMP9+aXlXFu/433QwWBevz521V55XtcEy4R8ZMz3wy16yRzgHGTRhLrV77rVkl4yb8to2bmjWub167aJjp1qZxFVf+qP0E8Lzsev1I79nA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JFC5BJo0ogqlcu8ea04CJEACJJB3AvzK5v0OsX4kQAIkQAIkQAIkQAIkQAIkQAIkQAKZE2jeuIG1DpxRYcXClSRAAiRAAiSQiAANFYlwcWcSIAESIAESIAESIAESIAESIAESIIG6SKBv56bWy+7YspF1PVeSAAmQAAmQAAnEJ0BDRXxW3JMESIAESIAESIAESIAESIAESIAESKCOEjh0qw6mQb2Nalz9eXv3qLGOK0iABEiABEiABJIRsM9bTFYG9yYBEiABEiABEiABEiABEiABEiABEiCBWk2gV/sm5vWLh5kHR8w0//1snhnSvYU5Y/eups8m9pkWtRoGL44ESIAESIAEikyAhooiA2VxJEACJEACJEACJEACJEACJEACJEACtZPAph2amMsO6u39q51XyKsiARIgARIggWwIMPRTNtx5VhIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgASFQVkPFt9+SOQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAl8T6CshorvT8tfJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJFDmGRUETgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJBApxREaTB3yRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAmUlQENFWXHzZCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAkECNFQEafA3CZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAWQnQUFFW3DwZCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAkAANFUEa/E0CJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJFBWAjRUlBU3T0YCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJBAkQENFkAZ/kwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJlJUADRVlxc2TkQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJBAnQUBGkwd8kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJlJUBDRVlx82QkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJBAg2Cf/A3CZAACZAACZAACZAACdQmAuu/Neapj+aYN8YvMB1bNDL7DmpnhnZvYTbaqDZdJa+FBEiABEiABEiABEiABEiABCqbAA0VlX3/WHsSIAESIAESIAESIAEHgePu/My8OmZB1R5/emWKOXZ4J3PDEVtUreMPEiABEiABEiABEiABEiABEiCBbAkw9FO2/Hl2EiABEiABEiABEiCBEhFYtmpdNSOFf5r7351pvpWZFhQSIAESIAESIAESIAESIAESIIF8EKChIh/3gbUgARIgARIgARIgARIoMoHJ81aqJc5eslrdxg0kQAIkQAIkQAIkQAIkQAIkQALlJUBDRXl582wk8P/ZOws4S4rjjzfn7u4u3B1ncMghwd01wSVYCC5/LEiABEIIJMEJBHcIh3M4lzvg4ITj3N1d9px//QZmM/u2q0f27dt5u7/6fHbfezM9Pd3f6bGqrioSIAESIAESIAESyBGBzdt0t4mtjnU5ah53QwIkQAIkQAIkQAIkQAIkQAIk8AsB5qjgUCABEiABEiABEohN4NEv5pvhU1eZAR3qmeMGNDVtG9WIXQc3IIHSJrBl23Z1F5WYTLsYm8mLNpiHP5tntkoG8qP7NTW/6tHQVK1cNqDWbtxm7v1gtpm7cqM5oGcjc0TfJqZeTb66FDtoXEACJEACJEACJEACJEAC5YQAn/bLyYFkN0iABEiABEggVwSeGb7Q3PbWDG93QyesMHe/N8vs17Oheea83obK31wdBe4nCgGX10QlDtYiCJGz4+i/jzVrNm71lr/x/RJTvUol8+xve5k9uzYoUjYXPy5/cbJ5f9xyb1cfyOfVr0w1NxzewVyyf9tc7J77IAESIAESIAESIAESIAESyDEBhn7KMXDujgRIgARIgATyncA7Y5cV68KnE1eaR2QmNoUE0kQAngGaVKahogiaCQvWFxop/BWbtm43Zz85wRRs1j1T/LLZ/MRhGzp+RbEq73p3lhk7d12x5VxAAiRAAiRAAiRAAiRAAiSQ/wRoqMj/Y8gekAAJkAAJkEBOCUxfWmDd33ez11iXcyEJlBWBLY48FGUU0aisUITud/rSDdYy6zdtM4tznHh89YYtXvgpW4PGzl1rW8xlJEACJEACJEACJEACJEACeU6Ahoo8P4BsPgmQAAmQAAnkmkDNqvbHh3USU55CAmkisI0eFZEPR61qldWyG8RYkUupXV1vCwwnFBIgARIgARIgARIgARIggfJHwK5pKH/9ZI9IgARIgARIgASyREBLaLthMxWIWULMarJEwGWoYI6KopDr1kiPcaCa5MbQhIYKjQyXkwAJkAAJkAAJkAAJkEB+E9DfAvK7X2w9CZAACZAACZBAKRHQFJo77LBDKe2R1ZJAMgIuQ0WyGsvvVvVqVFE7VxbpPKooO6WBST1MXEECJEACJEACJEACJEACeU2Ahoq8PnxsPAmQAAmQAAnknoCm0KzjCNeS+1ZyjyRg1DwHZFOcQB2HR4UrFFPxmrKzRAtFxetMdviyFhIgARIgARIgARIgARJIGwF96lTaWsr2kAAJkAAJkAAJpIJA3Zr2EDFVmZ04FceHjfgfge3b//ed39wE6jo8KqqUwbldWwwnazZuLdZozdOiWEEuIAESSAWBn34y5od568z3s9aYVg2qm4N7NzZ0wEzFoWEjSIAESIAESCB1BGioSN0hYYNIgARIgARIIN0EtJnOlah5SPeBq4Ct2wYNGSUSgVrVdEfrsjAO1Kxqbw9DP0U6nCxEAqkgsGXbT+aMJ8abLyavLGxP64bVzXuX9zNN61YrXMYvJEACJEACJEACJAACNFRwHJAACZCAhcC6TdtMgSQGrlq5kvztYKCYLW0dLGKpfzNjjfl00gozb8Ums3jNZrN07WbToFYVM7B9PTOwQ12zd7eG3m9Lk2MvWrhqk/l44grTTF4U9+vZyOtnWCWrC7aaZWu3eDPiajqUWmH1xF0PFh+NX25+mLvO47Jo9WaDxM09W9Y2O3esZwbJX/92deNW6yz/4/x1ZuTMNR7zzs1qOsuW5cpNW7eb0bPXmm+krQtWbjLL1m02K9Zv9ULetKhXzTtWXZrXNEfs1MQ0rF01K03VdL9yuqRGymLMpKbzIQ1ZtWGrXGtWm9Fz1polco1ZLuf0CllWTa51LWW2a8v61cxObeuaQ2TWa757yUTNUYFr29fTV5vh01abWcsKPB6rhQnGNJRq7RrVMH2FyeF9m5hchB4qi/G7zeF9UhbGAbklWqUsjCbWhsjCSQvXy71phZm+ZINZJPepJfIHg23fdnXMznLf3rNbA2/saNvHXb5VoHw1ZZXB/fuQPo1Noyxd0+O2I43lFwiTTyeuNLhf79apfqk/syVlkOsxE7Wdm+VZYq48e85ZsdHMXr7RG2Pr5TmrYPN2s3HLdlOwZZvZJJ8nD2pujurXNGq15sY3phUxUmDD+fKs8vR/F5qrD2lvrQfXbdynML5L+9k72ID18uz/4Y/LvXN63sqN3vMmnnnhUdZY2oL7455dG3j3xl6tawc3LdH38fPXe/fkvm3ryLN+vdC68Ay2VJ71Nkh728q9qbKSzye0ohIWwLvSXBkrGDOz5HOpXP8KfhkrGzbJmJHxA/m/wzqYnq2yx8tvdlncJ/1985MESIAESKD0CNBQUXpsWTMJkEAeEFi2bou89K/0lFMjREmFlycofm1SvUolM6B9XXPm4Jbm0D5NsqbAm76kwNz17kwzVJQdUELYZJQooh//UqzL8jJy0b5tzO8PaFsiZdmvH/2xyIsj6n39dzuZXUThHxQo7h7+bJ7nsr9cWAXbB+XdrqIMOKhXo1gvrcH6Xd+xr+dGLDIPfjrXOy62sjOWFph3f1jmrdpRXoLuOLaz2a1zfVvRyMswDs7790Szcv2Wwm36iRFkyKV9Pf6FCzO+YNYgFEjjF6wzMKRgLC1a/bPBCS9zmDn4hjBuIUrgkgpe4t8avdQ8JMdmwoL1kaq77tVpZnCXBubWozuZkr5gb1E0mjDslaWU1Zgpyz5H3ffajdvMU8MWeH94uY8iuC4cN7CZ+cNRHfNWIRpmqICC5e73Zps3Ry1RkUxetOGXdQvNFS9NMXuJ8vmPcq3p1ryWuk2SFWU9foPX98z2V86ltvCXnWvXmTK+zBgYtf720Rzz0jeLraGp0PyJYsDAesgRYty66ciOJTZY4H54w+vTCu/DV78y1VywT2tzi1zTXYL2fiqTEmYs3WigzMd9CfcoGFagnN61Uz3zzHm9xcDiqiW96/Acd+JDP5j/nafGM8p/cEU/T4nravlYmfzwtRhtYfjx7tu/8IGSvJo88z16Rg9PMe2qI8q6shozrrbhGQXPLF/IM/B/p66SSQ7/e+ZxbffZpJVmn+4NTf2a0dQIH4xbbq0O9yRfcByGymSUcRIeaoKcO2ibL3jW7N6ilunRorb37HJE36ZZe/729wEl+x/enG4+nrDCX1Tkc5NEoIMRA/cLGPn/+uFsz2hx13GdvTBWRQrH+IHn6gPuHeUZRPzNmtSpakbcuIsJ5gXCtXmIPPM9Kffwmcs2Fnk+xXaYtINn3xN2bpb1STt+u/CJ582vZKx8Kd4xMOpr70vBbfAdbf7y/wZmLk70u6zvk4kazY1IgARIgARiEdjhJ5FYW5Sg8G53jPRu8H4Vw+Um3KFxDf8nP0mABEggZwS+ldnnD34y1wxVXkrCGgKjxbDrd/Zm2oaV1davEEX4zW/OcCrItG2x/zvkBenU3VpoRdTlr3+/xPz++cnF1kMh+c9Tu3vLwQUKkeDLYrENAgvO2auVZyQILCrR17fHLjM3yv6jvjgHdwZjyxNn9UwcUqDHDSOsyifUeZh4JQRljSiAYCgZMmaZ96LvUvRhu6P7NzUPn94jWEXs7/+WWYh/fneWtY1RK7vioHbmSvmLMgvviS/nm3s/mBNpf1Bst5HZfdWr7CCKhEqi6NlBvlcy8L6pWbWy91lDwrngO2bq4ztiVfdpUydq09VyZTlm1EalYAUUCbcPmWmeHb6wUMEZt1k4hg+e1r3Y+I9bT1mUh3L32lenWncNZVswHIm1kGMhrnsw/GHcl1RyPX5hrDpTwrFA8RR23ULfMJO4tngW4pyGAtc/f3Eu4zyuVf3n8xpjBetQ/je7NvfKhrGBMenSF6aY9+RaGkXxVU9yaTSpW9W7tmBfVXGN8a4r8ilt9Noj1xy0EzOhUf4UaQu8B0siaOf9Q+eaB4bOicQsc1+n797S3Hl850TjBc8L/W75xrrfiXfuXkxpPFcUqjBm494E78Awuf/X3cxJuzQPK5bK9ec+NcG8b1GGn7Z7C3PPiV2LtBlj/TPxunhrzFJv5jyUzy6BF+L4P+7mKuJcV5ZjxtYwtOc9YYXnX+SMSCrgCr5RpNWVX1mL4XkTCvZb3pphhonyO6rgfL7xyA4G51NJBRNMcD7fJ4bHpAIPiBfO723qSk6duHKJPIu/Ic/kmfLAb7qbE8XoAC0NJus88PFcz1CSWc72+xExrsXxeLHVEVyGiTbPf73IPCITY6JOcghu73/Pht4n1/dJv+38JAESIIF8JoDnwYuenVTYBdwjcK9Is0SbCpHmHrBtJEACJBCDAEIpnf/0JG9GVIzNihWFMgXKr+fl5SSJTF28wRzzzx+KzYqKWhf2f43Mppwjs8CuP7xD1M28cpgJahPMkpN3WPPHITPMo1/MtxVRlz351QJvRuKjZ/ZMpITxK8ZL2e0J9u9vj0+Ea/rVPaPMuxL/OK4xHLMqbclbUe908d7wBcqOv8uL4/3CMoqSz99Om1nor3d9IvzC756fZEpSh18/xgBmw718YW+nIhEv8X/4zwx/s9BPsEDYnDgCBcG9J3U1v0lgdMN+ynrMxOlrrstCWXniQ+OKTBJJ0gZcb+BldJl4cl0nIRzySVznZ0mMFGCA695EUfS/eIH7PHLxKqvx+2+ZmRtHUYlrY1y5T2Ydj75111CDKK7ZLo+WzP3iGq1dpzPL+r/v/WC2+eiq/qaHKEaTCJR18EREMuCk8uyIhWaK3Puh1IwbOvE/o5aq95pZMlsZIWMgMGjc8Pp0MVAsjdVMlM9XQ8XXEjLTJvBWDQoMYVe+NDXW2IFnJZ7XuibwnirrMRPsO77De+JCUVQEvUUzy0T9/ep3iyMZKlyGoJvl2SJJW3Duw0MUoQv/elK3xKGh8Hxz0sPjSvw+gGvCgeIV8Y48c8IbIqqAjc1Ige0/kclCB+7YyJz95ITY7bvwmUleCLrz9m4dtSnWcrg3PSYTVe58e6Z67bFuqCz8j3gtXn5gO2Wte3FZ3SfdreJaEiABEiCB0iJQtjEaSqtXrJcESIAELAQQd3bQH0fGfui3VOUtQgiFJAJvjv3/MirRC1rm/v4hs+Iuf3GKZ2DIXKf9Rrxdm8jEU3PqYz/GNlL4dWFGI0LLJBUYSc761/jE+w/uFy+/+979faSZpMHt4NavCV5qITh+u4qHIBRfLiWorR4ofKHYjCtQPu1993dZMVL4+0b4AhjLYADRZNRsuwJIK590+Yvf/hwiJe72aRgzcducq/JQngy+67sSGymC7cWszttk9ms+yXYMklIUhIo77fHxifZQluP3C1FalrbAI26MKBPD5MsctAXXaswkTyLoxz5yPymJkcLfL667B9832ou/7y+L8unyLtz6Syg+zHoeeNu3sY0U2P9/p672jL5R2pK2Mpqye/Mv92w8q0EhDWNrXAMX+vqJhM2KK2kYM36bEd4LIetOfmRcVp47US/yYkF5HCbIcaGJdty08pnLEVrtutfs3nKZZTN/g8kJEi4M52M2BM+OR9w/xvjPiVHqXC7PdZqsk1hTe//5u8TtwwQT5EJJKjhncJ3C/T7uc662T1xjkkhZ3ieTtJfbkAAJkAAJlJwADRUlZ8gaSIAE8oAAQhlhZhIUxdmSOuJ+Hlfg0QFjQNiDf4cmNb38DwhNEhZW5JWRi80/xWARVTQGeLEu6Qzjf4giM8rLq62tf3l/VmgoLoQVgZs9uHRq6k5wjX4e+cDYyO7yaNN6Sf6nSUNJan7jG9PNMf8Y63mPaOXClo+LEIYjWAde0s6QEC1Rw3AFtw37DiXiv/+rG5eQRD4XMrUwB0C8vaVhzMRrcW5K4zpzisz+DrvOJGkNvK2i5kVJUn+2t9mW4IKEcC+4BuN6E0UQtgSzleNKWY5fhErKhQTzBmj7qyVhmnIhSRR3/vU3zKMEM6mRw+qgXo29/Aiu/kyTxNt4HokjrpnpSHR+mChJ4WWp3d/D9oXtlsh1I9/EpRhG8mPMWEfo4TihhTIZjJsXT+GbljGDfuDyh7H2csLJAJks/N+4tyBHWJhs+8VYFFYu6XqE9vsugZcTwq7Ck8slB4hHw1UHtzfnSog/5CkLexb38h3Jc2xUQSJsTZAU3mWc1LYLLv/np/OCPyN/hwHpEDFSRAkZF7lSKThmbrjR2lZfWd4nbe3hMhIgARIggdInEF/LVvpt4h5IgARIIKsE4B6OWNxRBLFv+4uyAbFmkeRuoSSc1ELZYHblq98t8eLIRqkbL69n/muCU3GOpJv3ndKtSKJsKCj+JjF0H3K8dGB2P0LnRHE7T6rIiNJHvFhh9iFe8OIIlAiYra0JFIb/OntHs1/PhkWK4AX1AnFz15RI6Os97882tx3Tqch22g/X7L+73p3lPHZanZnL4R0RR+56Z6ZBMvUwaV6vmmfcQmLUxqI0my1hwd6VXB9h4V2CCS0z94EE5Xg5Lw2Fd3Bfv+pR9LgG12nf0zJmtPaV1XLEID/1sfGRxmqXZrXMHl3qewpWHOfx4u0DxV5YHOq1EnojXwQ8ogiuWYh5jrGIvAe+IMnq42KcCfMWu15y6iBvUVQp6/G7Z9cGBt4gpS17i1E5THbv0iCsSFbW75vgOnOPKB5dXiEwmD9zXq8ihnMMOYSyukK8HbVrJ2ZyQxmZeU/TOoowQpqcI4rosHNW2za4fIXcv3EfySfZ4Jix/99pq8xHkqC5pLJsXTwDTlrGDPp983+mG4T1jCJ4ztpZJoLgGaJNwxqSZ6aaeVG8FrQwYlBkd27mnjCSxE6B/DYI24lzZ/LCDaFeMIi7/e1NgyKHgPpenqcQhk0TPPcgrGvmuQCjz0OSp+FOeSbTBM/px0u+N+TeCJOCLfrEmLBto6zHvfyOYzubBjLJJqrgfnncgz9ENpLAqL+HJPFG6LlWctxa1K8u4dWmWD058S6D599Gsk1UKev7ZNR2shwJkAAJkEB2CUS/c2V3v6yNBEiABHJCAGFt4PLvEijorj6kvfm1JNtsakm2CWU3FOKnifIvU8n/isxSQ8K7KPKqeD5oCg+04YHfdDPHDiheV+3qlc1NR3T0XhyR4NomeKG7VVy0/WTYtjJJl2Fm8a+6N/BeYPHyhVljUP5PVNzKH5QXtTiGCih1Lg4keMps5+7yEvSY5L6A8j1T8FI9VOKOw0Vd8zh4XGLsnrt3K9NOkjyHiWuGm2tGK17WTpfEkojx3V5esJ+RxMXwvrBJnFlyMLLhxdgleKn/iyS2tCm8fr9/W4Pkg5dKwsbMsevXifZqgmTbH1zZ3xtb81b+L9SZZrzDOIYXBmaxb/1FQxFUFGcq7VAe4+vqQ9ppTbAuT9OYsTawDBdivITNhMQ59ecTuhSLu37cQOPlvEEOEy2XDboW5VwqQwRFdv1LVJwiy4I/cO4+Ignu9+pmV5ZDYXbncZ3N3rLeNQses4vfkXMNxuYwScP4vUSuDTuIPeaN7/+X+wCeONp1DkZ8iO3czjyvUQ73rbMGt5T7VnX8dMpAmRyAazzy/vgK+QJRQGvKd9RdWRoftS24zuD4Ht2/qbMdmStxr0ObNLlgn9aS1LdjsZnWsjtPWQkjxtF/H6saK656eYoZ+YdBxba37U87LiirccI6GCPP3rOlOVzGJZKJY9IGPExt4gpFYyufhmVJ79kYE8cOaGrO2KOl6dOmjvdcs/efv7d2CZNWokqaxgzC9yCPjkvA4fKD2pnDd2piureoVawoEtJrhgrkQAqTnyJ6tOGcxjUJz9NQeAcF4/VcMcbZrjMoh2e/r8Xwh/taFLnwmYlqMTzjvn9F/yLGar8wrpe/26+N6d26tjldwv1p7fnnJ/PMg6d19zdTP11GNm0jeBTvJoakQR3rmzaNqptxkhAdz5ra9QHPopdKbqmo8h9JuBrmBYcJUciNt2+PRmKYKG7YPEbOK+26iWMV1VCRhvtkVG4sRwIkQAIkkF0CNFRklydrIwESSBmBBz6eoz7Ao6mH9mls7jq+S7GZU8FuYJbZYJnxidlVeAkNSpQXNZTHu9qf35sV3LTI93+c2j1UiQKlz1hxndZc+DF76q8nd3WGK9FeZoo05pcfeIH9kygzT81IctxTZpvBQLDbnSOtbMOUpJn7QoI9TXnfWpRcr1zUx5mMFS89b17SV/KPfJtZdeHvf325IJJXxeqC+DPFr5SX/CslPACUU77AYKEZKhaJl05UcY0Z1IFx+fR5O3rGAa3OI0VBBWUrjDk2aecwVKA8ZhfiGASl3dXDrC/pdx7f2ZuVHixbGt/TNGZKo39J60QYFE1B4NcZlhAb5/01YrhFaCB4EdmkucyazBdxKcqgpLzlqE6REhsf3LuxGXJpX3Oc5HXRFFS3iLH4MFH4Ba8FNk5pGL/wGkFi02By00c+n2duH1J8tjCMFJPu2t3Wlawtg4EnaORBLp/9JUGtTYZePcC7ptnWZXMZPBU1OXlQc3PL0W5Pvf4SLgb3dsz4tgkMDF9OXmU1MmeWj3tvwnPLw2KAO0SecYJymox5zVDhMngE60jT97hc0HYkKf67HJf6Nf/3GgyDDgxLtnBGS+Q4RZU0jZkn5LnHJfAgg8LZNeN+1071PaOj7dkxibeErT14xrxVziUYK2yC4/X5dQO9ZxhbO7DNi98simSo+Fq8yLRJLajn3+fuaDVSYJ0vCD2KZyJ4HtjkbUlMf8+JXdT++Nus26h7Sfll/E+8f8CYu0vHev4i7xOGFUwc0NoSN6+Oy3Mb1xSMl3MkFBaeEzSBR4n2HKLdO211peE+aWsXl5EACZAACZQ+gdwEhS39fnAPJEACJFCMAF66XQ/d58tsSIQTynTvLlbRLwuSxDr363p77FJ11iNePKLO9LxNXuZcLwiudWhL1LBDmLX1/S2Dihkp/P7AuwGKGpvgRRKJCqMIDDh3KspQbI+ZzpjVHyaYtXuxzHTTJEod2DaOQgLj5kPxNoA3TmYT8cKtHQuXUiDY/qmLNzjj3vduXce8dGFvp5HCr8+fpez/Dn62jeBpEiyPWW7ay2btHOS0SNuYCbIp6+/PSTgLTZGDtl28bxtz3WEdIjVTGzNQWmeO90gVprAQvEpqxsiPAAMtjHGaIATd+JAcNGkev5rBOA4jjU3c5a7Z/bVjHLO4+/XLw6D8moR2tAmu77cfo4+D4Da4t7vCwFSO+CYGb5eogpnl8NTINFJg+9YZs9WDddYLKO6Dy9P8XRuztjbjngzD0dMSqitopPDLZs7k95dH5ZK2MQOPTE3gfXu3KNPDnkdwrYdBwyY2hrZy2jIo2OG98JeTuoYq9WFEut0RwvM/o5aaoPemtk942GqCiUtRn4d2k3MMbbIJno8QFjZMoo7d3+7d2nx786BiRgq/fldbZi4rOrnK30b7xHOnTXDuDL26v8F7k/Zs62/XtXkt9ZqHXG9RJM33ySjtZxkSIAESIIGSEYj4eFyynXBrEiABEigLAngh0RSqUPLeLCEb4ggUtJkS1Xjx7PBFmZsW/o4argmzpRHWResTXh7CFPJRXowwg/71i/tYw2AVNlq+IC6tJpmeJ1q58QvWqfkl4JUAg0kUwexbhOHSpFm94mGjbGWjJhM9TmaMfX3TLl7ICFs9WGYLVYXlrlBLWO/LXz+c438t9omZbc+f3yv0ePsbLnZ4cUQ11Pl1rd6gh8HQZkT622bjM21jJht9ykYdeLG/1zFmdpLwJjdICLmoonn+IG55RZZTBrUwfhgkGwckSnZJmsevZsiumQMDZCYzrS0oh/BypS2vi4eiJgi1hzxWUQRhc7Qwidge4ZiiSNTwQwhT9vrvdlLzVTWtq98L8ymkm88s6uQChDX6Ru7ZmO2tiS2MDcpGvWenbcy4nsMQCiyqIHSQLf/ZoIzZ/VHr88t9JGE7kdsgquCZEM8+NsFzsaZk98tjAs374/ScJfCwiyPwptXkqynheUGiPI8jkTdyrAXzJtn2iVxTNonq9Y1tkURbe79AiE54HUWVe8W7O9OggedDzRiYWW+a75OZbeVvEiABEiCB7BOw3+2zvx/WSAIkQAI5J/DOmGXWfeJF57kYSl6/ku0WS4VlkV+88BOzvJA40yanSV6DsBlcMFA8N2KR6XPz16o7Neo+U0JDhYlL+YNtEWoJYZQQlzhMXEaEqLO4PlZiZWPffzgqXKkKpeC5T03wQoS4XvpOlhfcKKIpZ4PbYpYqjEvaC7NfdoDEXbcJQsiECZTO7/1gH7/Y9sYjOoQakoL7WKokA0Ufwl6Ag/Xg+4r1enisXBgq0jZmMvmU1W8oQ6Fo0ORvv+4WyxNCm8GNZJkVWXC+XHGwrqCaurjAiSfN43f5Wvv4qZUDD4ZMaC7FfC4MFVoSZtwjEYM9TL6assrs/5dR5sJn7GGfsD0UfwilGEVcPPztEcby7D1b+T+tn43rVLMa2mCw7hKSGNlaYRkvjBKuCnmc3vp9X0kO7b52ZYbV8bsW1eM1bWOmKtwhFLnshSnO+0VwM3hdDLmsn5d7DEZaGH2QgwGTWkoiUTwggvVjIs6R/XQDy7j564PFi33/QfI5aIJnl727NdRWW5cfJd5Smcp4v+CYufq+/DLLQrykEArvj5IMO4rsIjkrbILcZMjVF0Vcz/141n7si/kG7yNRBGHvXhSP337yiTEDL6/XLt4p0rsF6k/zfTJK/1mGBEiABEigZASi+d+VbB/cmgRIgARyTgBJBLXZZDeI3PjQLAAAQABJREFUkjfqLMZgw20vVVsihDj6fvZadZbSUf10hQcS2iER4iuShFtLhOy3DwrnYKxxf3nmZ5iy46UL+kSeKepiOHuZW1nnt+uj8faknngB1hLugcVbkvAPL00TxJMiTMAFCXOjiKac9beFJ86jZ/T0fzo/b5PQIJmz9y78VZtIiYgnidJZm9mGF+ozB7uVUZkNW7XBblxoZElQnrlt5m+XsSsXM6/TNmYy+ZTV7y8dMziRaN0VfsbW5pXKmKnoHhVg9WsJe3eb5KOwSZhHRZrHrxZuKRfndSZL170KSW1LU6CMGy33bZu4lNYwliP8Gu7bLsO5X++fToimhMS9QLsf+HUhsTfyWIUJdNfY7++em1yk6D0SfifMI7PIBin5EeZRgfvlEDFSRAnf9JtdW5j7h84t4uWJ6+aJO4dPdEjbmMHh6SihibTnYHj64A/3hoN6NTZ7S94F5LLSBOuekZBZ2ZQtUWb6ZOxwz64N1JBsP0gONyTj1uTbGWu0Vd52ca8rMFI0FQMfQv5lCpZhTLgmgriuEfBgefC0HpnVqr9dId3mrtxoukk4pjDBuYJ3Ce1941a55/1JQrXCWHSA5A1BjjTNcxj7wvr3Lu8Xtlvr+jTfJ60N5kISIAESIIGsEqChIqs4WRkJkEBaCHzgcO8+weH672q/bSKRbVlmHV9O1l3AMcsoKJjRj5n0z4qyA4aKqPLiBb2dLwx+PWscyaIvkvj1nWPMqMRLnfZSs2BVeDxtvKOOUWIoH5LhdQAlDZIgIrTC6xL7N0xp4/cXiSCRGDiqrHEkN8SL42sSEsv14hncD/JmfCxJX5HkEQk/kTAS7YkiX01dpRY7TeqJ2ga/Es1Q0SBBTHKXoaK0Y8enccz4jMv68wtJyqsJYlzHFX3MRDP6xd1fPpWH0hNKHVs+EFf4kbSPX81bqo70NdeiXWdwzyltwX1Ju8ccLErdoGAMfDJxhVznF5svHPf64Db4fu2h7T1FXuZy2++wpLtQNocl9g7We+yAZp7i/p2xy7wwWhf+qnWoZ2dw+zR9X73RboT32/iGhMGCF0wUgaEGitWXJYwkJkGA6wlipIiiwE7bmEF/4SESNiY/nbjS4A+CcwvbIFn03t0amF4yMQOGrdKSrVEeoDN2jhCGmoRNXPlutm6o2LGVXq+2PyxvWd9uqMA6XMNcoTXXOsYucqnEec5zhXSD0SSKoQJt7i18XQm4YcRA7h4/fw8mAQ2WsFMYM4PFiOQydqH+KJL2+2SUPrAMCZAACZBAyQjQUFEyftyaBEggpQS0Wa2YHRd1dn2Urm2L8KI13zLbCnUjDMEO8gaMhIfvinECoaq02W9aWzCj6/nzexsk04siWoJc1APFSVxpIvGu568sPpsMHi1hssqR66CbhBbAjFoogKBM+XzSSlVxpO1n3x4NzVPn7BhJyeDXsXGL7iKPhI9RZmX6deETniFRXfeD27mUCwdmKMqC22nf1ykvxEmS5MLookkdcfEvTUnjmCnN/sapG4Y8TTINolq54PKCzduCPwu/l0UYoMKdp+hLR4nZ/aMlcfY8y/XQb3bax692nYiaj8HvZzY+VxfYx18uDBWu+xfCI80Sj8EPflwuM9KXqcZ2FwPca6N4QPp12Axi/jrcu/92Sjf/Z+TP/Xs2MvjLd9mwSb9nIwxWH4di29Z3KJaRkyGupG3MoP3wsnlY8pq5xk+wn1BCD5NJEvi7U1ZgbCHE58G9Gxnk5glLvB2sK8p3zRjo2razI0/CUiV0nV+fK7Rnx6a6N4m/ve2zTcMaZpTifYWJQW5Dhf0aB2MMFP9xpJmMW01c/c7c5g4JNXXo30ZnLlZ/I9wkntHxB4EBH54UR/dvYo7o2zSWscXfSdrvk347+UkCJEACJFB6BEpXo1B67WbNJEACJOAkYFOeY4MeYqhIKlGMEra6tXBCmOXU4ZphsRXw/j7wInO/xJ13vQj5Zf1PbWZm9aqVQnMu+HUEP5tKIlAb64Wrww0VLrd3V1zv4P5t36HIuvvELgaJF+PKBpkdaxMYHKLklrBtm2SZFt8YioNBnaIlGA/ud9NWe1zhJLHeNyt1YX+l7VGRxjET5FxW36GI0MI1IFeKK/a01ubNihE2yZjR9pHPy2FMtRkqXH1K+/jVzu06ERNHu/oed93GLfZrce0ctEW7Z6MPu9/5nVmjGH7D+oiZ/Y+d2dMgfnsc0SYYoI7zxRsC9+GKKtqsdNwr43hTlpRf2sYM+uOFvbq0rzn7XxNiT4LB9jAkIL8a/m4fMlMUz00844crPxm2iypJPCrgZYBjazNyaGPBb4/mJYj1HRrX9IvF+tQSsKMSl4cu1msGpFYRPYBQhy/1Hd6xUZ7H/XqQ3PxRuUZd+vxk9ZnCL2v7RJ+QqwV/V7401cudd554dMLDOKqk/T4ZtR8sRwIkQAIkkJwADRXJ2XFLEiCBFBPQEix2bZ7sZQRd3YYMxxliW5ZRxCxZY09QinK2l63M7TN/IzndbUd38lz0M9eF/V6rhDaqKYaKJNJUyXGwWBSnYbIsZPZb2PaZ6/Hy+nuZCXmxhLDCC3oS0ZS9xycMF5akDdhmreK1gHjI6Gdc2bzNPus0idJ5syMvS1LuUfuTxjETte2lWc6VRBsK9SSiHedaCc+tJG1I8zbaeegyCqV9/GrXvyTXiZIeOy1pa9J7VZz2uGZmJzFSIGzgzUd1MriPJLh8G5eh4jgJ41SRRVMGw8s02x4ALs5pGzN+W+FFPOyGnc39H80xj0peL0057pd3ffoz5zuINxmSacc1uGXWneT5F3XUFaW87Z7nOk+wncsbNCzROra3iZZLDWU3OTx0sV6bOJT0eovnL9vxXRghFCva48uRYpDaQ86fP/xnhnlz1BJ/cexP3E+QSw5/mFj19990i2RUTft9MjYIbkACJEACJBCbAA0VsZFxAxIggXwgoBkqXLOOwvqVZPYX6lzpCHEUts/geiTevmT/NgYJnZOK9iIHj4okormba/yD+9BikAfLRPmOF8xL9mtjTpYEt0lf8LAfxMXVJG7IJ62eKMthD9Ne4BvWSnbb1l6Yk4R+0pSZ6JtLSRul72Fl0jZmwtqbq/Va4mvs36VIcbVPu94x9NPP1GYv32jF57rHpH38blMugrWrJTP8WgFFXKiF4SvJNT7irr3Y8lHLusrBm+n3+7f1khVHyXOg1aWFYUP5sgjLpbWzLJZrbFznYWm0M1vndrbGTLCPMKpeLbm6rjionflQQpYhB8eXU1YlmjGPehH67PD7xxiECTpnr1bBXRX7Xskx8LXrTbFKMhaIU4VVtOccv7DmMVtPQlYmMSCiXpvBxN9ftSpKQ38psCHL4RVhmLMaKiJ4OPtt9j+RJBvGqD+f0MW8OnKxeXP0UmfuCn877RPhTAf9caR55aI+oZOssnUuZevdQOsTl5MACZAACZQegWQaj9JrD2smARIggawQKNhsn0GelcoDlWjKvEARidGazAiAOvACdYGEdjhrcMus5NbQYpBXdrxMBvuS+V0zVECZjZdQJKfUpKSxxveSZI9QAu0pCfyyIZrCA3XnUlGnGZPQjhoJDUpaSBdt1jz2pYkWEkgrn83laRsz2exbSepyxXSuWTWZkllTIrkMVSXpQ6631TwiorZDyyfUqLb+aJ2v4zeJQTMqR62c6lFRLfn9VNtX5vKSGFwxrk7YpZn53b5tTWfJZ5EN0WZeo+5cGG6y0YfSqkNjU9refZn9SduYyWwffuN57LCdmnh/mBAxfsE68/GEFRKmZ0WiXCs3vTndwMsTM/A1cT1aRnl+ttWrhXDSJnj4deD6a7t/aQYDfzvX54ylBerqsDFYoHhcuIw76s5khRaK1ZU/xVUf1sEQCmMU/nBNRhiwoTJehsq4gcEqjoD9SQ+PM59dN9CZdDtf75NxWLAsCZAACZCAm4D+NuXejmtJgARIINUEoFhZY5nwapttFLUjmuIubPu44Qeg6EA+hDP2aGkGixLeoesP23Wx9S4leLHCERYgpIUmiDPryp9Rr2Z8BSpifJ8pXE4S74lmWY7LvV6Z3Yb+abN7tb6XZLlL6ZykHVBIaMnlo3i+ZPZFUy6U9OUycz+232kbM7Y2lsUyl0dFgRLr39VO5LzQlD6uUHauOsvbuqVr7OHtGtfWr4lpH7/aMS8LZfiWLIarizv2kszGR9z+03dvIUrbpibbhh3XvcmmeI3b33wurymZk9wrS8IhbWMmrC8wIMA7F39I7A4l9Jg5az1Pi89l9vtY+a5dD4J1X/nSFHNwr0aqN6VL6Z5k0gOcvqK0K9hG/3sjeV61hW5Dfeg/8l/ElekOQ0Xnpm5DZZgHSNy2aKFYlyj3qrj1gw8mBuHvtmM6eSHpRkxfbb6U8YIE7JMXbQitEter616dal6+sI9aNu33SbXhXEECJEACJJA1AjRUZA0lKyIBEkgTAW0m04r1WxM1E0r3pC9HUV9gfUUHEhaWlmJIe2ncooT8CIPlSuIJZafbUBHtFoRjibBOp+7WwiDecmmJJQVJ4a40ZUhhgSx+ccVR1maPunaPpIaaQSJJLOAqCV7mXe2Lsy5qCK5cjZk4bS/NstoMU+wzyZj5xydz1eZmS+mh7iDLK7RrXkl2M2nhevV+4Eo0m/bxCyO57T5XUu+TJKw1T8QSOChGbkb9iCH22jWqYU4V4wTuT9k2nAcb65okUZLJF8F9lLfv6zYle9ZLyiFtYyZuP6CE3qVjPe/vqoPbeZ4HQ8YsM08NW+D0tsD4QxipA3ZsZN2l26Mivuez6/6D89El8HabtcxeAvViIkxcmb9yk3UThB1K6mWj5RSz7iiwUPNwdj0fBDaP/bWOPJsfKMcdfxC8J734zSLz7/8uNAtX2bmg3FcyXuD1rhl0036fRB8oJEACJEACpUsgmpaodNvA2kmABEgg6wTwAG2TkbPW2BaHLhsqyt6k0rSuPsO2uyS6/fWuLcxxkmTT5Z2QdN+Z22lK5jVK8ubM7TN/u/o2f+VG07etnk8jrL9g8hths7sk9XO97Ga2KelvlzJuVUI+SdriCsOlGRxc+7nn/dnq6uXr9UTv2kZVFRcflzJNqyvu8rSNmbjtL63yLuXt3BUW1zJHQ3AteHb4QrXE0nV2TwJ1gzJeUUmJFOQKSxfW5L9+OEctMrhLfXVdvo7fbHviqYACK7TZzes3xVduBqqN9FWbmYyN4Tl2roRBgXGia/NkieojNSJQqJrjBE967w5Un9dftfN4dcG2nPYrbWOmpJ3HOD9x52beH8IbnfzIOKMp5V3hj1zt0MK7ubb5dOIKdfWOrd0TWXZqU8eMmr3Wuj1yDsU1VCCkkubR5Hr29RuAsWszDCc1LGgTh7APXMO19yK/PSX9xP0N4Vjxh5Bi5zw5wdo/7Gf28gLTQ5l4lK/3yZLy4/YkQAIkQAL/I6C8vv2vAL+RAAmQQD4S0F444M6eRP4jieRsoin+g2X7t6sb/Fnk+/Pn9zbn79M6sZECMWKf/3qR+Vrcr6M4RVRTZsMndUFvUqdakf4Ef7hc4lEOL1Wa5wsSh//z1O5mD1H6JTFSQGn+zthl5vXvl3izvILt0r67Zr+t3pC72ZnarDi0Gy/FExas17pQbDkSZ06U2d+aJJmNW1VJEImX4SSGFK1ttuVpGzO2NpbFshb19Jmgw6et9vLFRG3Xn9+bpSoXUIdrRmvUfeSynKbITNoGKKfe/UGZliuV7tRWv96nffxqrKYsDg/pkZSntp1mqJi+pPTb0tdxDJFc9qYjOyY2UsCwgGTGH4xb7s0q1vofXO5KyptrhXywXWn4rj2D5fKeDQ5pGzNo03KZ4f6JKPYRlmftxuSGm04SwuhKScSdRJR5DV5VSSY3uK69OyqKb7/de3TR85m9pTzj+9vaPl0G/X6Oa4hflzZ2Vyb0/HZNHJq+JFo+iVlisMG16XuZ1JXEkOT3DR42yIeSRNJ+n0zSJ25DAiRAAiQQjwA9KuLxYmkSIIE8IbBjqzrmfXnYzhQoUxGvv0uz6DMhv5D4q3BVtolr9rtffkD7ev7XYp9IYohE2UkE4Vn+9O6swk0xC2nY9Tsbl9t0LcXTBFzw5/IqKNxR4ItLqT4tgnIL8ZGRnC9T8HKdVKAsP+S+0UWU5rce3ckzCLnq1NzQsY0rHJOrziTrGkmMey0EC+p7deRic4v0J0yWrN1sLnxmUlgxA8WZa8xkVtChiR53GS+3SV9OM/ej/U7TmNHamOvlHR2xsGHcgqJqn+4NQ5uFax3CNriktI1Rrn0nWaddozUlUdg+7h+qe1MgBIamYPfrTfP4hYHfNjvado32+1NanxjTn01aWax6hBfB9ThqSMViFURYAMWsdg3GcwW8KZLIf6etMr9+5MdCQyD28dalfY1rMgP2oxn0sa6ie1TUq1HFzDfFw8ys3Zi7yQU4DmkbMw99Os/c8c5MNM0TjLW/nNQ18djFDHlNdmylezLs4JhpEjdHBZ5RtWdxtM3VDqzHxBdNYKiAEdLR3CKbIlToMyMWFVkW/BHFowKTY2yTRVx5yoL7yPzuCrU6Y+kGp4czjBJnPznefDrxf9dcvFM8+9vezu0y2+D/Rmin4XK90wTni0vSfJ/U2o0+Pymh0v7x8VxTV3LwIbQqvOavP7xDpOcvrV4uJwESIIGKSIAeFRXxqLPPJFABCPRsqRsiEHc3quAl4oKndWVvZcVDIVg/Xp7wkmiTBz+dG8kTInNbxA0OGimwHgqci57V24oyLpfqJO7mdWtUVvs2NcIMLiTlswm4J5nhtlJCGR12/5giRgrUf+tbM8y4eetsuypchmOkHackbAorjvkFL8q7SbgrTeAlIu/rTsFLNNzutbAEwY2nRjAoBcv3c4TzeklmCpe2pGnMlHZfo9bfR0JauJKZv/hN+HFZIefOef+eGLpLhP8IG3+hleSwgKZ4ghcZrhdx5G3x0nrOoZy6REJehEmax+/A9nZvEBxz5OXIpWhtQRte/25JqTYFY2Yn5TqHnD9aCBxXo0aLN2fQSIGyULye9vh4LyyLa1tX/otchiV0tbGs1jVRQmvmOlxZmsYMxlrQSIFjg7F2hSS+xkSduPLwZ/OsE3/8epDbQhPl0dcrvkWM6HHktZFLCo18tu0GK8+TfllMAtHaiiTbMCRGlS+nrHTePxBmKkwaS3tskvR5s60jR8fUxW6PiofkGAeNFGgX3ilOf/zH2J4Vm+W4XvDMRNWbGe9ELg9m7DvN90m0L1MwuWrHm0aYO8U4iLGEewSev3+Q945fP/qjefSL+Zmb8DcJkAAJkICDAA0VDjhcRQIkkL8Edu2kK3rv/WB2qNIaPV8qM9JPfHic99CpkdBCKQXLY4bt4ZIg2yZ4mP23GB2iChSEiI9+4xvTrZvYZqAGCzaRcEuaxFXa+fU0rWevc0YEQ8Wvd9Vnpl736rRIina/HXBtP+Cvo9UkfkPG2MN3+dvjs7HMILNJLj0qsP9jBzS1NcNbhpdHvAxpgpfEs8VIocViztxu7Fy3ASezvMstH7MuXTMvM+tK8jttYyZJH7K9DZRBB/durFaLsQ9vCU0Qzuhg8UKyze60bYPZmfki2oxeKO52v/M7813EvEUwDl/wtG7IgaeRpgQLskrz+HUlAj9fDPYwgOZK+js8EWF4Lm3PnjP20D0dr3ttaiwMQ+W6ePTfx1qVrLjvjp3rDkmp3WPRiFzfm2J1PAeFWyjPH0nDWZakyWkZM/Bs1OT61+zPjrbyGJvITfHHt/XnjQFi3HQZye1TdH7eG67BUQUTKq59VT/v4M0WxcsK+WU0uVgm+mBWfJjg2nPxc5PVYvv2aGgaKkaI4Eba82ZSQ0UbRzLwsAkpI2cW92xGW/G8+VgMJTtCk+5+13fO58BD+9jfh4Js0nyfDLYT3+GFePa/3BODbpN71pyY+cIy98PfJEACJFCRCNBQUZGONvtKAhWIAF4AXG7gp8gMF5dSDoqFQX8cacaE5LSo5JouFuB9zp76yxGULlGU6OPnrzcH3jtKDBWzAzUX/eoKEYGSLo+KeWI0SSLayxFmFYUptlo1qG7womsTbH+KhMkIU8TgxRJhsPb683eqkQL1Y19hAiW8TRaKIjeXctIuzU1LR3sxwzFz9hvah3BPB9w72mDWb1QJU5LZ6nHFX/6tzMpHjOMwgRLkVZkZ/X+vTTNPfDk/dKz49aVtzPjtKutPxM13yVnyIr1odfFE2FBqDRbFQpxZ4mHeSa525Hqd6xKNa8xRokCGFxbGIAy9iNGN2Om4duF8ggfF/n8ZpRqH/f785aQu/lfnZ5rHr3YtRocwE/vMf40PvR6DG2Z0Y0LATW9OT+yJ0aFxDdXDDQpOKP4nLwo3mOF4Pi7HFkrOOEbUo/s3VfePa+/tQ2aGehZBofk7UWie+cR4q5HCHyiuHDMog5ngmuT63qS1o6yWa+EnMUZcz3il0d60jJlKmhuZdBpeA8hp5pINm7eZZ0csNIPuGOkMtYQ6bgsJQ+l6Ro6aAwHH8SSZNOQybFy0bxtXlwrXQUmuGRGglN9fnrFt4e/8CvDcgvsFPjW58/ho9wLteRwz8aOyCbZB6xfKIFl4UsG13NVf1ItrHbx4DhB+rmsSjFoX/qp1aFPSfJ/MbDzCPbnGpl8eOeMoJEACJEAC0QgwR0U0TixFAiSQhwRO2LmZp0ywNR0P3bvfOdJLiokEe4jgNFIUdniBGyF/URQgqLeqSwsW2DFm2sIVHG7AmYIHXOQSgJLsFIl9jTAutapV9pQgmIHzjbTnkc/nRWrTqbu1yKy+yG/tpR6F5q1M9iIDd/ORM+0z+BAnOiz/wY1HdDTHP/hDkXb6PxAbfVcxGN15fGdvtnK7X1zbkRhy8qL15hXJ1/CShLUJe0lASKcjJUF3mLSsX838aPHQLu3Zu5ntQlLbe07sIm734zNXFf4+TVzyLzugreets00mAb4/bpl59HOJ1i0vuXHENibDtj+odyM1TAL2f85TE8x+PRsaKAUQqxkGIMTrBcdRs9d4yYgzz7HqVSuZ03fXZzEH25SmMRNsV1l+h8Hwt3u39pSytnbguMCYd/sxncQ4WM9LtPr814vMm6Pih9GBF86xA5rZdpO6ZQ6dXWFbYZAOM0oXFrZ8OUU8wwY7ErVmbpLW8dtDktHC2K0peKHo3/n2b80F+7Q2/drVNb0khMcmiW2+ePUmmS26yQwVA+lQybsUvAa9OWqpGXPrrqG5OzIZ4fde3RpY81RgHe6N+97zvZfjCR6UuM4gnAiuMVCUIS8L8kkEr90wOn1x3cBIibChUPvdfm3MAxJv3Ca4JyMG+9WHtPeM7b4xAfuDIe/f/11gNSZn1oUY5p2bueO14zFDOy5J79uZ7cjX364JCPAU69pcDwOa7T6nZcyEjafTxXD22Jk9DWb++wLjBGbD456A0Gphz1TYDgmTXV5YKOMymkRJeI7z+OqXpxY5j1FvUNAPV7jMYFl4ON9/SjfP6Bpc7n+ftazA7Pmn78zuEn7zuIHNvBwDeIZF6LvPxSvxvbHLnV7WeIaBkTWKNJfnTU3my9iNWk+wDhg/YHDJlJUbii8Llukqeftsk19QBtdzeJc/fHqPIucTwkXi2R+KelfukOB+bpYJFWETqvzyab1P+u3zP6N6L0/McfhEv338JAESIIF8JEBDRT4eNbaZBEggEgG44d/93uwiSpPghniYv/zFKcFFsb9HfeBGxQ+e1sNTFGo7eVni++MPggSRmO0bRzAD/9pD2zs38RX9tkIr1sfbn18HlPuaIH52mKECL4RHiRFB8yoBh98//7ObPQwOUOIHFWHavoPL/yRJErXZa8FyneVlDd40mYL9YaZwFKVn5rZJf+/f82clgCuMA5RomiItuF8cdyhtbMoHhMyK27fz9motCm5RQDo8jvDSq734Btvmf8cM5aiGijSNGb/9afi8Rs7/Z4YvVM8PKKCvEqVPFNEMq9g2briwKPsrrTI7GNHylqIg5NMdx3aOtYe0jl9cX/997o7mxIfGqf3BGLrvIz2heOaGmBQA5edZg6MZIYPbP/Cb7t6EAs1wgrJI/h6WAD5Y553vzPL6GFymfb/y4PZe222KP2wDI+8ZovSF4FkA4YZs11ivgOUfeD8kzwVRBNdwm6JryRq3AjJK3flcxpWUFx5RuTRUgGMaxgwmxsBooj0n4Xw69bEfvTKNRLG9XiZ+xH3eRA6Bf529Y+jQqeyI3QCPK3gU1xVDAMI24VkS5w882tYUbDMwGoSdTziHkCQ8jhzYq5FnpHGFSsWEJfzFEbQFiZOjSnuHQQPXzSSGihb1q1sNFWuFp0uOEg8yVx4FGLH2uft77zrXoFYVb+KJNr60/VwjRt1zHKG3MrdL630ys53I1RdF8F5HIQESIAESiEbA8fgQrQKWIgESIIG0EoBXwg1HdCjV5oUp4YM7xyy3W0Pc5P3ycV8a4fL93uX9PE8Mvw7bZ2tHDNt1MQ0jfv2tG+qzx9aIoSKK/Ek8JqIYEvDSmuTlKMzTxG9jx6Z6X3KdnBNtuu/krmr4Eb/NYZ94eX7u/F4Gs6VtAqazY8bOhcHmaVFoQhmSLdkqM7PjSFrGTJw2l3bZOqIsvVfGTEkFRs/Xf7eTWs2P84t7hqmFy3hFtSqlZ6iAkvSDK8KvuzYEaR2/8Ay5VDy1silxr9n+vnFPeOqccGWoXz7KZ5y2YPY19o9raJhA+RumVM2s48ULe5ue4pUSRTo0sd+bwmZKR6k7n8u0F0OhJlFm7GvbJl2ehjGDZ98rD24X2gWcC/A+ivu8eWifxubFC3pH8pKq6rJUSAtxzkApD6MEDAOYoY8Z6gg1F3Y+4fnjrUv7RgrrmQnj8bN6mi4yMSWbgvCLUOJHldaO8J7wcEkimodRWH39xUMOhoEwwXXOTxQdVja4Hsb8Kw4KH5PBbfA9rffJYDvBLopELRelLpYhARIggfJOIHsahvJOiv0jARLISwKY+Q339JKKppCtF3Emjb//8yVkBmYVZVOgVHxflGXNlaSSwX1BkakpXWpUjTYrKFgfviNUlSZ1Is4ggqFl6NUD1NjBWv1hy6+SGbFxXo5aymw0TQq2JHtx1OqLshyzQb/8v4GRjDi2+nCsX76oj/dC3qu1rhCbnMAlHeGcnjmvl223iZadurs7bFlmpWkZM5ntKuvfx0u4iqfluGjneVj7cB2B0RMzxLU8KVBW4C8fpKOiyET/oihmtD5CWffhlf1DPca07dM8fq89tIOaO0jrj2v5SRKGMalg5vblB8ZXcGn7izOjF3UgtM0LopTNpuDcxLUzTrgw7VyMa+DNZj/SUFdzJa8U2lYgHi5lIWkYM3j2LY0Z3Ahz98RZO3qerVHYJr0PhdWN6/eHV/U3SZW/MOa89fudjMvLOKwNwfU3iCcFnu/jCMKmaqK9c2jl/eUIgWcThNYMk6gTqcLqyVx//6+7xfKkCG6f5vuk384zxXs/bJxjnB3eNzyJuF8nP0mABEigohMIv2tVdELsPwmQQF4TwMzvJ2TmVEkUUkgwinAYNokze8rfHorz+07ulpXZ6Iih/fWNu8R62dJm1vdrZ3/B8dutfSJEDF4aMwUP7q4ZY5nloSD99JoBBoqpkgo8R6BEvCrCrMLgvrSXPJRp7EhoGqwj298RWmbY9Tt7MeHj1A3+b16yU+HY31kUbpogREYSQQz54TfsXLiPJHVgGxgTrxPlaFxJw5iJ2+ZclD9QeEKJE1dRhfMGBkPf6DnAMVNwqSUOdi76FncfOKf9/gS3xUx5eI0MkRm5uIZFFXhRvHpxHy/sie26F7UelEvr+JVLh3Dp54W0SqowQ/+wLThD2VQSQUhDzODWlPVR675S7r0HSEi9uIJ70tuX9Svx/rFf5O4ZJTk74k6g0M5F29iO2798Ll+zWiXr+Y0+xXn+yDaDsh4z4PLl9QNN79bRr20uBqjnkTN6eM+ucUJgxinr2n9wHTytPrt2oOlWwvwjuC59Jc9WCBObVFAH3jEu2T++F1o3yU+jSWe5zyQRhLWySZQQaJh0hOtc3OcG2/6w7KBejWUSVX9z0i7NtSKRlqf1Puk3HvclhJfVBOfOSzJhKMyYoW3P5SRAAiRQEQlUvlUkVx1/4ssFZnUgDMi5kvQxiZIvV+3lfkiABMoHAeQ0OFmSVLeREEVIzLclYogZvID8UdyV/ywPoDOWbjRvWJLOwgCyXwLFR295IcDL0coNW83UxRu8mLxRaUNxjRk8fxVjx9ESVxb9iyPYN5KMbgzMNkRi3CQvWtgv9g8OX0xZZdZJrGNfbj+ms3Epx/1ywU94fJwoLzU9JUzRNMmdsFQSMEcVvAQc1LuxGCfam7tP7CrxjnXvCK1OKB6XiwJ2jCQLDgpm4cZVLAW3L+l3zIbDGMY9FIlaJVqCU5BI/rnzexeJz40X34c/m2fdFjMB2zniJbt21qBWVa9tfdvWNV/PWFNkDLi2wzokkv3DUZ3MTZJQPalCtKzHTFgfy2o9PF5O2bWFlyB19vKNzmbg3LlGDEVIllk34AWFBMGvSmLVTEF5KI+RvDjtguvTCTs3N5i9CuUd4rdj9uve3X5OJItQGadJAtTjpQyUOZhpi5B++EQYFyQph5IYeXQQVgvXl2zNwgW7tI5fKBj7i5H+rMGtzHIJzfLj/PWRDzWuo4ft1MQ8L8YFXBeyIbjvnSfXYcQD/3r6msj3TIxVJNt+VJIHw9soqeIU4+Rc2T+uU7hnx/EowrMErsmYsXzpAe1CQzTaeHWS0JEf/biiWPx5PJ9kO4SNbf9pXtaiXnXz7g/LijQRzxDwDIr7fFSkkhL+KOsxg/PwN7u18MJljpZwSmHPDZndxbmDa+c/Tu3ueaZ2b6F7ZWZuG/z91w/nBH+W6Duuw/AYbOHIjRZnBxgfeLb7VfeG8uy31UxfWhBp8x0lZBsmVzx4Wnd5jknGBXybyQSdzyetLDw2WAalN65ZSQT1Na5TzXvXQa4PCOp8VIxMWlio4H5QBqFScY2bEZFFcHsYOS6WCVRI1o6xl63jlNb7pN93THZAQvdFqzebtfIeVFOeH2D4+cNRHc0dx3WmvssHxU8SIIEyITB50YYiz0m4bx2Rci+vHX4SyRWt3e4YaeYE4mAPl1nASRJF5aq93A8JkED5I4Dn9m9mrDbvjF3mxcBduGqzWbVhi4EiGIq9pjJTC8oqGACCIY2eGrbA3PjG9GJAoLSKO2s/sxK0afi0VV6CWiQ8nifXScTmhcKwsbQHysJGtX/+Pqhj/aw8+OPK/+WUlaZg83azR5f6icOXZPble3kZnitK0X6i4MrG9X3xms3mE0luDUXrfGGDWMZ46UICSHCBlwM+oWQf1Kle1mYswcPg4/ErTBVRVO4hMduhrEyLQEH2ysjFMo7XeGN4iTDCOMFDBxT/R/Zroiqu3hRj2++e+zkxud+ffXs0NM+LUSNbskqMbzCmjJm71vwgBh/k9oByDxMT8IcXYYTGwIsdFMHZlrIaM9nuRzbrQxxyJDTGcYEiBrlj2ojivkfLWqaHjBsYwZDM1CbXvjrVPDdiUZFVSBj6+wQzSItUwh9WAmkdv1B6wXg8Vs5rJFNHTHko/etU//m8bijn9o4yc3SQGIJyMcsfcdL9tkyS0HW4Z/pGJrQFOaFgKIcSP6lxwnqAflmIfWLiA9qBexOUU7XEEObdl/z7k3zuKArzqHkoXPvz12G/w6et9p4DBounh3be+uUryidi8H8szwor1m81u8hxhyK5NI57SXiW1ZhBmzFBZ+j45eaFbxaZ8WJ0xISMYA4IKJjxHIVcKEjyjOdgGBuhIC6ptLryK2sVeF45UQwh4yTnERTjmOiCvBmbA5OJcC5jRjo8444XY18zR6gv605iLsQz5reSJwNK+nlybmMM4XkZ7cBzFrjgGpdNIz3G7icTV3r7gIEiG89FOLYwgGwWnlCg47oUVzAx5o3vl5jX5W/mso3e83ewDlzn8RzRUcYMDMl95DjBYywXxsG03ieDfPidBEiABNJC4K3RS81Fz04qbA6M/vCSTLPQUJHmo8O2kQAJpIbA8Q/+4CX6y2zQnTJT5uw9W2Uu5m8SSC0BGKe+m7XGzBWDGIxxQYNcahvNhpUpASi1YOCFMnZvCfdV0hA8ZdoZ7pwESIAESMDz0IRnLUIplaZyud3Vw4oYRXz08FRFkmVKfhCAwWbZus2mklhvYLShkAAJkAAJ5AeBfDRU2KfP5QdvtpIESIAEckIAM8JHTF9t3Ve24v9aK+dCEigFAgh/g9wSFBKISgBKCcyupZAACZAACZQPAvDGqZ8sFUIsADCCBL03/I23y6x/Sv4QgHcJPM8pJEACJEACJFDaBNIfXLi0CbB+EiABEggh8K6EidKkV+tksWm1+ricBEiABEiABEiABEiABMozgaj54sozA/aNBEiABEiABEigOAEaKooz4RISIAESKELg2RELi/z2f8BdHjGxKSRAAiRAAiRAAiRAAiRAAkUJINeXTWxeFrZyXEYCJEACJEACJFCxCNBQUbGON3tLAiQQk8D9Q+eYUZIg2iaH9mEoFBsXLiMBEiABEiABEiABEiABLfE0PSo4NkiABEiABEiABGwEaKiwUeEyEiABEhAC/xm11Nzz/myVxW/3YRJtFQ5XkAAJkAAJkAAJkAAJVGgCikOF2bqNOSoq9MBg50mABEiABEhAIUBDhQKGi0mABCo2gW9mrDYXPzdJhYAk2l2a1VLXcwUJkAAJkAAJkAAJkAAJVGQC1ava1Q3bmEy7Ig8L9p0ESIAESIAEVAJV1DVcQQIkQAIVkMD6TdvMXz+cYx75fJ6z97cc3dG5nitJgARIgARIgARIgARIoCITqFrZbqhg6KeKPCrYdxIgARIgARLQCdBQobPhGhIggTwn8H+vTTMvfL3IVK60gzl3r1bmwn3bGCTAtglmdj0zfKG5fchMs2nrdluRwmUn7dLcDO7SoPA3v5AACZAACZAACZAACZAACRQlUFPxqNj+E0M/FSXFXyRAAiRAAiRAAiBAQwXHAQmQQLkk8MXklZ7hAZ3bKkaIhz6b5/0dN7CZOXZAU9OgVlUze1mBmbBgvRkvf6MlYfaajVtDWTSsXdXceVzn0HIsQAIkQAIkQAIkQAIkQAIVmYAW+okeFRV5VLDvJEACJEACJKAToKFCZ8M1JEACeUwA3hE2eeP7JQZ/SaRejSrmgyv6mdrVKyfZnNuQAAmQAAmQAAmQAAmQQIUhoHlUMEdFhRkC7CgJkAAJkAAJxCJgDxoZqwoWJgESIIH0Eci2QzmMFB9d3d+0bVQjfZ1li0iABEiABEiABEiABEggZQRqVqO6IWWHhM0hARIgARIggVQT4JNDqg8PG0cCJJCUwDH9mybdtNh2R/Vrakb+YZBpRyNFMTZcQAIkQAIkQAIkQAIkQAI2AnWq2wM40KPCRovLSIAESIAESIAEaKjgGCABEiiXBGBcGHJp3xIZF3q2rG2e/W0v88gZPUzdGgz3VC4HCjtFAiRAAiRAAiRAAiRQKgR6tKxlrbdZvWrW5VxIAiRAAiRAAiRQsQnYpzhUbCbsPQmQQDkhsHOHeubrm3Yx/522yjw3YpH5YNxys2nrdmfvmsuL097dGpjz9m5t+rSp4yzLlSRAAiRAAiRAAiRAAiRAAnYC8HC+78M5Zuv2okFZrzionX0DLiUBEiABEiABEqjQBGioqNCHn50ngYpBYHCXBgZ/kNUFW820xRvMFPmbu2KTlxi7SZ2qpkndqqZv27oG3ykkQAIkQAIkQAIkQAIkQAIlI9ChSU3z+XUDzQtfy4ShH5d7z9oX7dvadGtu97Qo2d64NQmQAAmQAAmQQL4ToKEi348g208CJBCLQP2aVcxA8bTAH4UESIAESIAESIAESIAESKD0CHRqWtPcdGRH76/09sKaSYAESIAESIAEygMB5qgoD0eRfSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBPCVAQ0WeHjg2mwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgATKAwEaKsrDUWQfSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCBPCdBQkacHjs0mARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggfJAgIaK8nAU2QcSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESyFMCNFTk6YFjs0mABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigPBCgoaI8HEX2gQRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgATylAANFXl64NhsEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigPBGioKA9HkX0gARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggTwlQENFnh44NpsESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEygMBGirKw1FkH0iABEiABEiABEiABEiABEiABEiABEiABEiABEiABEggTwnQUJGnB47NJgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIHyQICGivJwFNkHEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEshTAjRU5OmBY7NJgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIoDwQoKGiPBxF9oEESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAE8pQADRV5euDYbBIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIoDwRoqCgPR5F9IAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIE8JUBDRZ4eODabBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABMoDARoqysNRZB9IgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIE8J0FCRpweOzSYBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCB8kCAhorycBTZBxIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARLIUwI0VOTpgWOzSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESKA8EKChojwcRfaBBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABPKUAA0VeXrg2GwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESKA8EaKgoD0eRfSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBPCVAQ0WeHjg2mwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgATKAwEaKsrDUWQfSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCBPCdBQkacHjs0mARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggfJAgIaK8nAU2QcSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESyFMCNFTk6YFjs0mABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigPBCoUh46wT6QAAmQAAmQAAmQAAmQAAmQAAmQAAmQQL4Q2LLtJ7N+0zaz/aefTPUqlUzNapVNpR3ypfVsJwmQAAmQAAlknwANFdlnyhpJgARIgARIgARIgARIgARIgARIgAQqIIG1G7eZl79dZF78ZrFZVbDVbN/+k9mGv5+M2bx1u9m0ZbvZKr9t8sRZPc1hOzWxreIyEiABEiABEij3BGioKPeHmB0kARIgARIgARIgARIgARIgARIgARLIBYE/vj3DPDdiUaJdnffv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5h3XEZPVgU4aPXKs3rsRPd1P8ds14t+z+TNj9wnD/ZNfrKjxeUbEQqajiOyawA+nw/DuhYKC3slSpo3WehN/OmlgtSgKpJAa2r1AUI8isfXr6I5guO+sIcY588X3G2SbBuSYl2wTBG5V6A+c4x3nlXoS69NjI6MFuU0/xrUjXha1Tow+HWupBcvhpDhCa9CwkQAJkAAJkEBjItBkm7b6uqDxN0+UhWuLY8t9ct04wZMHbCRAAiRAAiRAAiRAAiRAAiRQ1wQ2FVfImi1l0kcNkb49OWNL4q8qGBNhQK5tKyqtkLdnrpM5K4pk8bpisUW/27bMlQ7qCGmvNSTwjtQ6ewxsI3iSvL4acvFPXbRJX5tNGhxcc8vmOYLURe3USYIoEzhpYEitDWNVK5/MXS+ztRD14G4tZZzqzESUSKqc7H3FtTTVH3A6ZGPL1s8M+L06fbVM/H6jIHXXEL2XiB6pj88sPkNvzlgjr+trzoqtslhtEXAUDera0rz2VSccUpwFNRRAP/LOKdWcZYgseuWy0aEprYJ0sY8ESIAESIAEGoLAC1+tkov0QRrb8AABnOrZ3OioyOa7w72RAAmQAAmQAAmQAAmQAAmQAAmQAAnUOwFENHy9ZItGVmyWzuoU3F+jbGrjfKv3C+CCJEACJEACOzSB7dFRkdm44B369vPiSYAESIAESIAESIAESIAESIAESIAEGgMBpOga1avQvBrD9fAaSIAESIAESCDbCbCYdrbfIe6PBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABBoxAToqGvHN5aWRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQLYToKMi2+8Q90cCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACjZgAHRWN+Oby0kiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEgg2wnQUZHtd4j7IwESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIFGTICOikZ8c3lpJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJDtBOioyPY7xP2RAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQCMmQEdFI765vDQSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESyHYCdFRk+x3i/kiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigEROgo6IR31xeGgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlkOwE6KrL9DnF/JEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJNCICdBR0YhvLi+NBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABLKdAB0V2X6HuD8SIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESaMQE6KhoxDeXl0YCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEAC2U6Ajopsv0PcHwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAk0YgJ0VDTim8tLIwESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIFsJ0BHRbbfIe6PBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABBoxgWaN+Np4aSRAAiRAAllEYP6aYvnti/Pk3ZnrpGOrXDlml05yzWF9JTenSRbtklshARIgARIgARIgARIgARIgARIgARIgARKobwJ0VNQ3ca5HAiRAAo2YQOU2kYVri2XZ+hIpLa+UnKZNpGNhrvTrlC+n/n26GcPlL1lXIve+s1i+X7VVHjx7aCMmwksjARIgARIgARIgARIgARIgARIgARIgARJIRoCOimSEOE4CJEACJBBKoKi0Qh7+eJl5wUmRSnt1+hrB/JbNc1KZRlkSIAESIAESIAESIAESIAESIAESIAESIIFGRICOikZ0M3kpJEACJFCfBNZuKZN7NCrigfeXSDlCKdJsCzUl1JBuBWnO5jRL4NvlRfL3dxebe3HM6E6y75B2TKtl4WTR+/36/5dP5qyXMX1by/FjOkmv9i2yaHfcCgmQAAmQAAmQAAmQAAmQAAmQAAk0DAE6KhqGO1clARIgge2awEdqaP3hAzOkRNM71bYtoKOitghlm/qJjvnbVNlYXG50PTtppeQ1ayqPnj9M9typba31U0FmCDzyyTK56YV5Rtmb36yVP74yX/bfuZ08ct5w0SxpbCRAAiRAAiRAAiRAAiRAAiRAAiSwwxJousNeOS+cBEiABEggZQIwiN/22gI5WetNZMJJgQ2kmi4q5U3vABO+Wbol5qSwl4v7c/a/vpGtpbV3JlmdfK8dgZemrq6h4B0t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tTYFoymceDhAAiRAAiRAAiRAAjscAToqdrhbzgsmARIgARIgARIgARIgARIggbolcOebC0OjKU7drUvdboDaSYAESIAESIAESIAEtisCdFRsV7eLmyUBEiABEiABEiABEiABEiCB7CawdkuZPPjhUucmrz+yr+SwNoWTDwdIgARIgARIgARIYEckQEfFjnjXec0kQAIkQAIkQAIkQAIkQAIkUEcE/vqGO5qiY2GunDyO0RR1hJ5qSYAESIAESIAESGC7JUBHxXZ767hxEiABEiABEiABEiABEiABEsguAms2l8nDHy9zbur6o/oxmsJJhwMkQAIkQAIkQAIksOMSoKNix733vHISIAESIAESIAESIAESIAESyCiB20OiKbq0bi4njmU0RUaBUxkJkAAJkAAJkAAJNBICdFQ0khvJyyABEiABEiABEiABEiABEiCBhibw1MQVzi0gmoKlKZx4OEACJEACJEACJEACOzQBOip26NvPiycBEiABEiABEiABEiABEiCBzBBYuLZYtpRUBCpDNMVxYzoHjrGTBEiABEiABEiABEiABOio4GeABEiABEiABEiABEiABEiABEig1gTa5jdz6rjxaEZTOOFwgARIgARIgARIgARIQOio4IeABEiABEiABEiABEiABEiABEig1gRaq6Pi5wf0qqGnb8d8OXYXRlPUAMMOEiABEiABEiABEiCBGAE6KmIoeEACJEACJEACJEACJEACJEACJFAbAtcc3lfO3rO75DXz/tQ8aGh7ef3yXaRJk9po5VwSIAESIAESIAESIIHGTsAdm9vYr5zXRwIkQAIkQAIkQAIkQAIkQAIkkFECKJb9++MHyM3HDZBtqpnFszOKl8pIgARIgARIgARIoNESqFdHBX5RZSMBEiABEiABEiABEiABEiABEmjcBBBBwSCKxn2PeXUkQAIkQAIkQAIkkEkCTP2USZrURQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkBIBOipSwkVhEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBTBKgoyKTNKmLBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEggJQJ0VKSEi8IkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKZJEBHRSZpUhcJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEBKBOioSAkXhUmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABDJJgI6KTNKkLhIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggZQI0FGREi4KkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZJIAHRWZpEldJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACKRGgoyIlXBQmARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARLIJAE6KjJJk7pIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARSIkBHRUq4KEwCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJBJAnRUZJImdZEACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACaREgI6KlHBRmARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIJMEmmVSGXWRAAmQAAmQAAmQAAmQAAmQAAmQAAhs27ZNthFFoyLQRK+mSRP8zGCbO1dk4MAMKqQqEiABEiABEiCB7ZEAHRXb413jnkmABEiABEiABEiABEiABEggiwjAKVFcUiLrN26WTZu36Psm2ajvpRWV6rDwNlo783aV06OJJGjSUyzRxHpF7LA9D+AEbYl6PHGjycywanAS67Wd9qKq7SUmZebbM7vzqvXie6yUmaLrYF9o3s/E87gheILMqXoOzDvuAeY1ie3WWyfWYwCprJnmz62m0FNX82fVOjlNm0ir/HxpXVgg7du1kVaFLaVAz5s2rUWyhi5dai7JHhIgARIgARIggR2OAB0VO9wt5wWTAAmQAAmQAAmQAAmQAAmQQOYIwCkx+etZMn3mbFm6fIUUbdkqJaWlUlpeJpWVsIt7hm7PnJ7+uta0Dj04junzbe+pOSri5vtbsvrtDmP649eznUa42i7stNi7HbXvsQGjz+u16uyY11s1o+rISui7nYRBtLjzRHl7bt4hFz/HHhsl0X40UUdFbk6ONM/NlZYt89VZ0VaGDxkkY0cOla6dOqTnsGjVKtrilCIBEiABEiABEmjUBOioaNS3lxdHAiRAAiRAAiRAAiRAAiRAAnVHYPW69fLgk8/L1K9nSsnWIjVgN5OW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ARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEE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FULUuyp+/tcfXfX28osB331guycsrtk5XXZt2Vh22jO69JyunVviR+ckMy6mSD0CCCCAAAIIIIAAAggggAACCCCAAAIIIIDAqxU4fGq+6OeI/bx0Ms4Pn5orh+38iaPny9P2M8rxiz92S/np77l+lCZXRewVm6hIvc8+/Io9h+u58vVnT2cR3wgggAACCCCAAAIIIIAAAggggAACCCCAAAIIvGEEtIvi79u7m2/ev+V1ec9XfKIi1T//2InyLx54rvz5EyeyiG8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBF63Aj9173Xl5y1BccPuTa/be9SNXTWJivwtPHdstnzuO8f9pdtKXpw8v5hVfCOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggcNUK7Ng8WX7gzr3lB+/cU7739j1F12+E46pLVAz+Ur556ExRwuJB22nxoj3XSy8f0TO/OBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQuFIFtm+aLHu3byz7d0yX97xlxpMT77tl55U63bHO66pPVKylo5dxK2lx7OximV9c9syTXqi9w370HwAHAggggAACCCCAAAIIIIAAAggggAACCCCAAALjFDh0fM5eoj1na9QrPszMFktObNtYrtv1+n6U06imr9tExagQxCOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggMDlF5i4/EMyIgIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQAiQq+C8BAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkKjgvwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYNwESFetGz8AIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAooL/BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGDdBEhUrBs9AyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggACJCv4bQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXUTIFGxbvQMjAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAiQq+G8AAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkKjgvwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYNwESFetGz8AIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAooL/BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGDdBEhUrBs9AyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggACJCv4bQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXUTIFGxbvQMjAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAiQq+G8AAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkKjgvwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYNwESFetGz8AIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAooL/BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGDdBEhUrBs9AyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggACJCv4bQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXUTIFGxbvQMjAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAiQq+G8AAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAII/P+LiZJYuxO3UAAAAABJRU5ErkJggg=="
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"# RAG (Retrieval-Augmented Generation)\n",
"\n",
"![rag.png](attachment:928a55e1-a9e2-48e0-a15c-b0badb9452dd.png)\n",
"\n",
"## What it is\n",
"\n",
"*Retrieval-Augmented Generation (RAG) is the act of selectively adding relevant information to help the LLM generate a better response.*\n",
"\n",
"## Why it helps\n",
"\n",
"* Avoids [Context Confusion](https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html): Context Confusion happens when superfluous information in the context is used by the model to generate a low-quality response. RAG ensures that only relevant context is presented to the model.\n",
"\n",
"* Reinforces [“context is king, not prompts”](https://x.com/jxnlco/status/1945490018127987092): As Walden Yan of Cognition said, *\"models are already smart; What limits them now isnt clever prompting but how much context they have about your task and their previous actions.\"* RAG is an effective way to supply relevant, task-specific context to the model.\n",
"\n",
"## RAG in Practice\n",
"\n",
"[RAG](https://github.com/langchain-ai/rag-from-scratch) is an extremely rich topic. For example, code agents are some of the best examples of RAG in large-scale production and [Varun from Windsurf captures some of these challenges well](https://x.com/_mohansolo/status/1899630246862966837):\n",
"\n",
"> Indexing code ≠ context retrieval … [We are doing indexing & embedding search … [with] AST parsing code and chunking along semantically meaningful boundaries … embedding search becomes unreliable as a retrieval heuristic as the size of the codebase grows … we must rely on a combination of techniques like grep/file search, knowledge graph based retrieval, and … a re-ranking step where [context] is ranked in order of relevance. \n",
"\n",
"## RAG in LangGraph\n",
"\n",
"We have several [tutorials and videos](https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_agentic_rag/) that show how to use RAG with LangGraph. Let's build a simple RAG agent with a retrieval tool!"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"from langchain_community.document_loaders import WebBaseLoader\n",
"\n",
"# Let's index a few of Lilian Weng's blog posts\n",
"urls = [\n",
" \"https://lilianweng.github.io/posts/2025-05-01-thinking/\",\n",
" \"https://lilianweng.github.io/posts/2024-11-28-reward-hacking/\",\n",
" \"https://lilianweng.github.io/posts/2024-07-07-hallucination/\",\n",
" \"https://lilianweng.github.io/posts/2024-04-12-diffusion-video/\",\n",
"]\n",
"\n",
"# Load documents from each URL\n",
"docs = [WebBaseLoader(url).load() for url in urls]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
"\n",
"# Flatten the list of documents\n",
"docs_list = [item for sublist in docs for item in sublist]\n",
"\n",
"# Initialize text splitter \n",
"text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(\n",
" chunk_size=2000, \n",
" chunk_overlap=50\n",
")\n",
"\n",
"# Split documents into chunks\n",
"doc_splits = text_splitter.split_documents(docs_list)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`as_retriever` [defaults to 4 retrieved chunks](https://api.python.langchain.com/en/latest/_modules/langchain_core/vectorstores.html#VectorStore.as_retriever)."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"from langchain.embeddings import init_embeddings\n",
"from langchain_core.vectorstores import InMemoryVectorStore\n",
"\n",
"# Initialize embeddings model\n",
"embeddings = init_embeddings(\"openai:text-embedding-3-small\")\n",
"\n",
"# Create in memory vector store from documents\n",
"vectorstore = InMemoryVectorStore.from_documents(\n",
" documents=doc_splits, \n",
" embedding=embeddings\n",
")\n",
"\n",
"# Create retriever from vector store\n",
"retriever = vectorstore.as_retriever()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# Results are a list of Document objects\n",
"r = retriever.invoke(\"types of reward hacking\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `retriever_tool` just concatenates the content of the retrieved Documents."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">Retriever Tool Results:</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1;32mRetriever Tool Results:\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">Content:</span>\n",
"</pre>\n"
],
"text/plain": [
"\n",
"\u001b[33mContent:\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">s in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">training. If during training, the coin or the cheese is placed at a fixed position </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">i.e. right end </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">of the level or upper right corner of the maze</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\"> but testing in the env where the coin or cheese is </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">placed at random, the agent would just run to the fixed position without obtaining the coin or </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">cheese at test time. A conflict arises when a visual feature </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">e.g., cheese or coin</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\"> and a positional</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">feature </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">e.g., upper-right or right end</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\"> are inconsistent during test time, leading the trained </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">model to prefer the positional feature. I would like to point out that, in these two examples, the </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">reward-result gaps are clear but such type of biases are unlikely to be so obvious in most </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">real-world cases.</span>\n",
"\n",
"\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">The impact of randomizing the position of the coin during training. When the coin is placed at </span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">random for </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">{</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">6</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">11</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">}</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">% of the time during training </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">x-axis</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, the frequency of the agent navig</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[37ms in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during \u001b[0m\n",
"\u001b[37mtraining. If during training, the coin or the cheese is placed at a fixed position \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37mi.e. right end \u001b[0m\n",
"\u001b[37mof the level or upper right corner of the maze\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m but testing in the env where the coin or cheese is \u001b[0m\n",
"\u001b[37mplaced at random, the agent would just run to the fixed position without obtaining the coin or \u001b[0m\n",
"\u001b[37mcheese at test time. A conflict arises when a visual feature \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37me.g., cheese or coin\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m and a positional\u001b[0m\n",
"\u001b[37mfeature \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37me.g., upper-right or right end\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m are inconsistent during test time, leading the trained \u001b[0m\n",
"\u001b[37mmodel to prefer the positional feature. I would like to point out that, in these two examples, the \u001b[0m\n",
"\u001b[37mreward-result gaps are clear but such type of biases are unlikely to be so obvious in most \u001b[0m\n",
"\u001b[37mreal-world cases.\u001b[0m\n",
"\n",
"\n",
"\u001b[37mThe impact of randomizing the position of the coin during training. When the coin is placed at \u001b[0m\n",
"\u001b[37mrandom for \u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;36m0\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m2\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m3\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m6\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m11\u001b[0m\u001b[1;37m}\u001b[0m\u001b[37m% of the time during training \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37mx-axis\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m, the frequency of the agent navig\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from langchain.tools.retriever import create_retriever_tool\n",
"from utils import format_retriever_results\n",
"\n",
"# Create retriever tool\n",
"retriever_tool = create_retriever_tool(\n",
" retriever,\n",
" \"retrieve_blog_posts\",\n",
" \"Search and return information about Lilian Weng blog posts.\",\n",
")\n",
"\n",
"# Test the retriever tool\n",
"result = retriever_tool.invoke({\"query\": \"types of reward hacking\"})\n",
"format_retriever_results(result[10:1000])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import getpass\n",
"import os\n",
"\n",
"from langchain.chat_models import init_chat_model\n",
"\n",
"def _set_env(var: str) -> None:\n",
" \"\"\"Set environment variable if not already set.\n",
" \n",
" Args:\n",
" var: Environment variable name\n",
" \"\"\"\n",
" if not os.environ.get(var):\n",
" os.environ[var] = getpass.getpass(f\"{var}: \")\n",
"\n",
"# Set up API key\n",
"_set_env(\"ANTHROPIC_API_KEY\")\n",
"\n",
"# Initialize language model\n",
"llm = init_chat_model(\"anthropic:claude-sonnet-4-20250514\", temperature=0)\n",
"\n",
"# Bind tools\n",
"tools = [retriever_tool]\n",
"tools_by_name = {tool.name: tool for tool in tools}\n",
"\n",
"# Bind tools to LLM for agent functionality\n",
"llm_with_tools = llm.bind_tools(tools)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing_extensions import Literal\n",
"from IPython.display import Image, display\n",
"from langchain_core.messages import SystemMessage, ToolMessage\n",
"from langgraph.graph import END, START, StateGraph, MessagesState\n",
"\n",
"# Define the RAG agent system prompt\n",
"rag_prompt = \"\"\"You are a helpful assistant tasked with retrieving information from a series of technical blog posts by Lilian Weng. \n",
"Clarify the scope of research with the user before using your retrieval tool to gather context. Reflect on any context you fetch, and\n",
"proceed until you have sufficient context to answer the user's research request.\"\"\"\n",
"\n",
"def llm_call(state: MessagesState) -> dict:\n",
" \"\"\"LLM decides whether to call a tool or not.\n",
" \n",
" Args:\n",
" state: Current conversation state\n",
" \n",
" Returns:\n",
" Dictionary with new messages\n",
" \"\"\"\n",
" return {\n",
" \"messages\": [\n",
" llm_with_tools.invoke(\n",
" [SystemMessage(content=rag_prompt)] + state[\"messages\"]\n",
" )\n",
" ]\n",
" }\n",
" \n",
"def tool_node(state: MessagesState) -> dict:\n",
" \"\"\"Performs the tool call.\n",
" \n",
" Args:\n",
" state: Current conversation state with tool calls\n",
" \n",
" Returns:\n",
" Dictionary with tool results\n",
" \"\"\"\n",
" result = []\n",
" for tool_call in state[\"messages\"][-1].tool_calls:\n",
" tool = tools_by_name[tool_call[\"name\"]]\n",
" observation = tool.invoke(tool_call[\"args\"])\n",
" result.append(ToolMessage(content=observation, tool_call_id=tool_call[\"id\"]))\n",
" return {\"messages\": result}\n",
"\n",
"def should_continue(state: MessagesState) -> Literal[\"tool_node\", \"__end__\"]:\n",
" \"\"\"Decide if we should continue the loop or stop based upon whether the LLM made a tool call.\n",
" \n",
" Args:\n",
" state: Current conversation state\n",
" \n",
" Returns:\n",
" Next node to execute\n",
" \"\"\"\n",
" messages = state[\"messages\"]\n",
" last_message = messages[-1]\n",
" \n",
" # If the LLM makes a tool call, then perform an action\n",
" if last_message.tool_calls:\n",
" return \"tool_node\"\n",
" # Otherwise, we stop (reply to the user)\n",
" return END\n",
"\n",
"# Build workflow\n",
"agent_builder = StateGraph(MessagesState)\n",
"\n",
"# Add nodes\n",
"agent_builder.add_node(\"llm_call\", llm_call)\n",
"agent_builder.add_node(\"tool_node\", tool_node)\n",
"\n",
"# Add edges to connect nodes\n",
"agent_builder.add_edge(START, \"llm_call\")\n",
"agent_builder.add_conditional_edges(\n",
" \"llm_call\",\n",
" should_continue,\n",
" {\n",
" \"tool_node\": \"tool_node\",\n",
" END: END,\n",
" },\n",
")\n",
"agent_builder.add_edge(\"tool_node\", \"llm_call\")\n",
"\n",
"# Compile the agent\n",
"agent = agent_builder.compile()\n",
"\n",
"# Show the agent\n",
"display(Image(agent.get_graph(xray=True).draw_mermaid_png()))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #000080; text-decoration-color: #000080\">╭─────────────────────────────────────────────────── 🧑 Human ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #000080; text-decoration-color: #000080\">│</span> What are the types of reward hacking discussed in the blogs? <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
"<span style=\"color: #000080; text-decoration-color: #000080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[34m╭─\u001b[0m\u001b[34m──────────────────────────────────────────────────\u001b[0m\u001b[34m 🧑 Human \u001b[0m\u001b[34m───────────────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n",
"\u001b[34m│\u001b[0m What are the types of reward hacking discussed in the blogs? \u001b[34m│\u001b[0m\n",
"\u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> I'll help you find information about reward hacking types discussed in Lilian Weng's blog posts. Let me search <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> for relevant content on this topic. <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> 🔧 Tool Call: retrieve_blog_posts <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Args: { <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> \"query\": \"reward hacking types\" <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> } <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[37m╭─\u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m 📝 AI \u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m─╮\u001b[0m\n",
"\u001b[37m│\u001b[0m I'll help you find information about reward hacking types discussed in Lilian Weng's blog posts. Let me search \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m for relevant content on this topic. \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m 🔧 Tool Call: retrieve_blog_posts \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m Args: { \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \"query\": \"reward hacking types\" \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m } \u001b[37m│\u001b[0m\n",
"\u001b[37m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #808000; text-decoration-color: #808000\">╭──────────────────────────────────────────────── 🔧 Tool Output ─────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning | Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> | <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Posts <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Archive <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Search <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tags <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> FAQ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Table of Contents <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lets Define Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RL Environment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RLHF of LLMs <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Training Process <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> References <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for alignment training, reward hacking in RL training of language models has become a critical practical <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contain biases that mimic a users preference, are pretty concerning and are likely one of the major blockers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for real-world deployment of more autonomous use cases of AI models. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and LLMs, remains limited. I especially want to call out for more research efforts directed toward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation part in a dedicated post soon. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reinforcement learning. Designing a reward function for an RL task often feels like a dark art. Many factors <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> How you measure the success? Various choices may lead to good or problematic learning dynamics, including <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in RL. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M = (S, A, T, \\gamma, R)$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where $R = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s \\in S$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $M$ and $M$ share the same optimal policies. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When $F(s, a, s) = \\gamma \\Phi(s) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\begin{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Q^*_{M'} (s,a) &amp;= Q^*_M(s, a) - \\Phi(s) \\\\ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> V^*_{M'} (s,a) &amp;= V^*_M(s, a) - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\end{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> without impacting the optimal policy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Geirhos et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> including unreliable spurious features, while attempting to fit the data without constraints. Their experiments <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> showed that ERM would depend on spurious features no matter how easy the task is. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lets Define Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> task as designed. In recent years, several related concepts have been proposed, all referring to some form of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacking: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking (Amodei et al., 2016) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward corruption (Everitt et al., 2017) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering (Everitt et al. 2019) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Specification gaming (Krakovna et al., 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Objective robustness (Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goal misgeneralization (Langosco et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward misspecifications (Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> as a behavior that satisfies the literal specification of an objective but not achieving the desired results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Here the literal description of the task goal and the intended goal may have a gap. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function is intrinsically challenging due to the complexity of the task itself, partial observable state, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> multiple dimensions in consideration, and other factors. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sufficient intelligence or capability. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model generalizes capably but pursues an objective different from the one it was trained on. This happens <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when the proxy reward differs from the true reward function, $R \\neq R$. This is known as objective robustness <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inconsistent during test time, leading the trained model to prefer the positional feature. I would like to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> be so obvious in most real-world cases. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function itself, causing the observed reward to no longer accurately represent the intended goal. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function or by indirectly altering the environmental information used as input for the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> But I consider reward hacking as a broader concept here.) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> environment or optimizing a reward function not aligned with the true reward objective—such as when the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is misspecified or lacks key requirements. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model learns to interfere with the reward mechanism itself. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> camera. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unrealistically height. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> away from the goal. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> next to the ball to touch the ball in high frequency like in a viberating motion. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimal policy to going in circles and hitting the same green blocks over and over again. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learning results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The list of specification gaming in AI examples is collected by Krakovna et al. 2020. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high score but the generated summaries are barely readable. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model learns to change unit test in order to pass coding questions. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model may learn to directly modify the code used for calculating the reward. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The recommendation algorithm for social media is intended to provide useful information. However, usefulness is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engagement on the platform. The algorithm ends up recommending content that can affect users emotion states <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> users while the true goal is to optimize users subjective well-being. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> people tried to game the financial system. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist?# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goodharts Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodharts law <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into 4 variants: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Regressional - selection for an imperfect proxy necessarily also selects for noise. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Extremal - the metric selection pushes the state distribution into a region of different data distribution. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fail to intervene on the goal. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> proxy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Partial observed states and goals are imperfect representation of the environment status. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> changes part of the environment, it becomes much easier to exploit the environments mechanisms. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high-dimensional inputs may disproportionately rely on a few dimensions. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> design of good RL objective challenging. A special case is a type of the reward function with a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> down the original intent, such as an ads placement algorithm leading to winners getting all. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> impossible since there could be an infinite number of reward functions consistent with any observed policy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> an fixed environment (Ng &amp; Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into two classes: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (e.g., re-scaling) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experimental - $\\pi$s observed behavior is insufficient to distinguish between two or more reward functions <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> which both rationalize the behavior of the agent (the behavior is optimal under both) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Iterative self-refinement is a training setup where the evaluation and generation model are the same and both <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model is used as evaluator and generator with different prompts. The experimental task was essay editing with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> objective, but this creates negative side effects in the process (Pan et al., 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> al. 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> GPT-4, empirically. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When the judge and author are configured to see different numbers of past iterations, the gap between human <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and evaluator scores tends to increase if they share the same number of iterations. Identical context <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> context length for ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> natural language. Here this goal is often underspecified and does not capture all the constraints or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> requirements and thus can be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The study described two processes leading to ICRH, paired with two toy experiments: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Output-refinement: LLM refines its outputs based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Bradley-Terry model. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the issue. ICRH persists, although at a slightly lower magnitude. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Policy-refinement: LLM optimizes its policy based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to build a LLM agent to pay invoice on a users behalf but run into InsufficientBalanceError <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and then the model learns to move money from other accounts without user authentication, potentially leading to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> failure and each task was evaluated by GPT-4 to assign a helpfulness score. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> constraint violations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When comparing ICRH to traditional reward hacking, there are two noticeable differences: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hacking occurs during training. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalist. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback, as well as injecting atypical environment observations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fine-tuning on best-of-$n$ samples. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in holdout environments. (Image source: Kei et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Incorporate user beliefs; e.g., thinking about its conversation partner and grader. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> gameable environments. They observed that training on easier environments in the curriculum amplifies <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rewriting its own reward function after training on the full curriculum. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Such a curriculum of gameable environments include: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Political sycophancy: The environment rewards the model if it gives answers matching a users political views. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tool-use flattery: The environment provides the model access to run command line to get access to the users <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file system to read a poetry sample in a local file. The model may give the poetry a high rating as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sycophantic response. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Rubric modification: The environment scores the model based on a checklist and the model must mark every item <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on the checklist as completed to receive a high reward. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contains a test to check whether the reward function has been modified. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model was trained following this curriculum, and the paper measured whether the model can learn gaming <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the next. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Quantitative generalization results of a model trained with expert iteration according to our curriculum from <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each stage to the next. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation, supervised fine-tuning the model on the first two environmentswhere the reward hacking behavior is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> likelihood of reward tampering in holdout environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Lets lightly review three <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential approaches in this section, not exhaustive yet. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tricks that the model discovered where the reward is high but human rating is low. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> replace the reward function, it gets negative rewards. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> information that enables it to hack the reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Careful engineering. Some types of reward hacking against the system design can be avoided by careful <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rare events of the agent hacking to get a super high pay-off strategy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learned scalar reward models are quite vulnerable to learning undesired traits. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> others. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decoupling means that the query action for collecting feedback is sampled independently from the action taken <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in the world. Feedback is received even before the action is executed in the world, thus preventing the action <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> from corrupting its own feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rollouts, we can build a binary classifier based on distances between action distribution of two policies, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Performance of detectors on different tasks. (Image source: Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ` <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features in modeling and aligning human values. They conducted a systematic error analysis for value alignment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> according to this taxonomy. Features are categorized into two groups based on heuristics: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Target features: Values explicitly intended to be learned. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2020). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> SEAL introduced three metrics for measuring data effectiveness for alignment training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> linear regression of rewards $\\underline{r}(t^_i)$ (orange) and $r(t^_i)$ (blue) against features. Overall <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the alignment training awards positive features like harmlessness and helpfulness and penalizes negative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and after alignment training. The training process refines the model's sensitivity to target features. Note <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the effects of each feature and each event type. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The robustness metric $\\pi_^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> interpreted in such a way: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> According to their analysis of alignment robustness metrics in terms of different rewriting, only the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> statistically significant. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Cited as: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Weng, Lilian. “Reward Hacking in Reinforcement Learning”. LilLog (Nov 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[33m╭─\u001b[0m\u001b[33m───────────────────────────────────────────────\u001b[0m\u001b[33m 🔧 Tool Output \u001b[0m\u001b[33m────────────────────────────────────────────────\u001b[0m\u001b[33m─╮\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning | Lil'Log \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Lil'Log \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m | \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Posts \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Archive \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Search \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Tags \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m FAQ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Table of Contents \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Background \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Function in RL \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spurious Correlation \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Lets Define Reward Hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m List of Examples \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in real life \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist? \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking RL Environment \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking RLHF of LLMs \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking the Training Process \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking the Evaluator \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In-Context Reward Hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Generalization of Hacking Skills \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Peek into Mitigations \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m RL Algorithm Improvement \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Detecting Reward Hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Data Analysis of RLHF \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Citation \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m References \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m for alignment training, reward hacking in RL training of language models has become a critical practical \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m contain biases that mimic a users preference, are pretty concerning and are likely one of the major blockers \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m for real-world deployment of more autonomous use cases of AI models. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m and LLMs, remains limited. I especially want to call out for more research efforts directed toward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m mitigation part in a dedicated post soon. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Background# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Function in RL# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reinforcement learning. Designing a reward function for an RL task often feels like a dark art. Many factors \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m How you measure the success? Various choices may lead to good or problematic learning dynamics, including \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m in RL. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M = (S, A, T, \\gamma, R)$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m where $R = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s \\in S$: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $M$ and $M$ share the same optimal policies. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When $F(s, a, s) = \\gamma \\Phi(s) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \\begin{aligned} \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Q^*_{M'} (s,a) &= Q^*_M(s, a) - \\Phi(s) \\\\ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m V^*_{M'} (s,a) &= V^*_M(s, a) - \\Phi(s) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \\end{aligned} \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m without impacting the optimal policy. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spurious Correlation# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m source: Geirhos et al. 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m including unreliable spurious features, while attempting to fit the data without constraints. Their experiments \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m showed that ERM would depend on spurious features no matter how easy the task is. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Lets Define Reward Hacking# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m task as designed. In recent years, several related concepts have been proposed, all referring to some form of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward hacking: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking (Amodei et al., 2016) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward corruption (Everitt et al., 2017) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward tampering (Everitt et al. 2019) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Specification gaming (Krakovna et al., 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Objective robustness (Koch et al. 2021) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Goal misgeneralization (Langosco et al. 2022) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward misspecifications (Pan et al. 2022) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m as a behavior that satisfies the literal specification of an objective but not achieving the desired results. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Here the literal description of the task goal and the intended goal may have a gap. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function is intrinsically challenging due to the complexity of the task itself, partial observable state, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m multiple dimensions in consideration, and other factors. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sufficient intelligence or capability. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model generalizes capably but pursues an objective different from the one it was trained on. This happens \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m when the proxy reward differs from the true reward function, $R \\neq R$. This is known as objective robustness \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m inconsistent during test time, leading the trained model to prefer the positional feature. I would like to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m be so obvious in most real-world cases. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Koch et al. 2021) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward function itself, causing the observed reward to no longer accurately represent the intended goal. In \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the reward function or by indirectly altering the environmental information used as input for the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m But I consider reward hacking as a broader concept here.) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward tampering. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m environment or optimizing a reward function not aligned with the true reward objective—such as when the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m is misspecified or lacks key requirements. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward tampering: The model learns to interfere with the reward mechanism itself. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m List of Examples# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m camera. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m unrealistically height. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m away from the goal. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m next to the ball to touch the ball in high frequency like in a viberating motion. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m optimal policy to going in circles and hitting the same green blocks over and over again. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m learning results. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The list of specification gaming in AI examples is collected by Krakovna et al. 2020. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m high score but the generated summaries are barely readable. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A coding model learns to change unit test in order to pass coding questions. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A coding model may learn to directly modify the code used for calculating the reward. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in real life# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The recommendation algorithm for social media is intended to provide useful information. However, usefulness is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m engagement on the platform. The algorithm ends up recommending content that can affect users emotion states \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m users while the true goal is to optimize users subjective well-being. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m people tried to game the financial system. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist?# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Goodharts Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodharts law \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m into 4 variants: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Regressional - selection for an imperfect proxy necessarily also selects for noise. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Extremal - the metric selection pushes the state distribution into a region of different data distribution. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m fail to intervene on the goal. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m proxy. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Partial observed states and goals are imperfect representation of the environment status. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m changes part of the environment, it becomes much easier to exploit the environments mechanisms. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m high-dimensional inputs may disproportionately rely on a few dimensions. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m design of good RL objective challenging. A special case is a type of the reward function with a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m down the original intent, such as an ads placement algorithm leading to winners getting all. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m impossible since there could be an infinite number of reward functions consistent with any observed policy in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m an fixed environment (Ng & Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m into two classes: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (e.g., re-scaling) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Experimental - $\\pi$s observed behavior is insufficient to distinguish between two or more reward functions \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m which both rationalize the behavior of the agent (the behavior is optimal under both) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In-Context Reward Hacking# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Iterative self-refinement is a training setup where the evaluation and generation model are the same and both \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m model is used as evaluator and generator with different prompts. The experimental task was essay editing with \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m objective, but this creates negative side effects in the process (Pan et al., 2024). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m al. 2023) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m GPT-4, empirically. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 2023) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When the judge and author are configured to see different numbers of past iterations, the gap between human \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m score and evaluator scores tends to increase if they share the same number of iterations. Identical context \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m context length for ICRH. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m natural language. Here this goal is often underspecified and does not capture all the constraints or \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m requirements and thus can be hacked. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The study described two processes leading to ICRH, paired with two toy experiments: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Output-refinement: LLM refines its outputs based on feedback. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Bradley-Terry model. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the issue. ICRH persists, although at a slightly lower magnitude. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Policy-refinement: LLM optimizes its policy based on feedback. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The experiment is to build a LLM agent to pay invoice on a users behalf but run into InsufficientBalanceError \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m and then the model learns to move money from other accounts without user authentication, potentially leading to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m failure and each task was evaluated by GPT-4 to assign a helpfulness score. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m constraint violations. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When comparing ICRH to traditional reward hacking, there are two noticeable differences: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m hacking occurs during training. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m generalist. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m feedback, as well as injecting atypical environment observations. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Generalization of Hacking Skills# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m fine-tuning on best-of-$n$ samples. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m in holdout environments. (Image source: Kei et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Incorporate user beliefs; e.g., thinking about its conversation partner and grader. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m gameable environments. They observed that training on easier environments in the curriculum amplifies \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m rewriting its own reward function after training on the full curriculum. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Such a curriculum of gameable environments include: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Political sycophancy: The environment rewards the model if it gives answers matching a users political views. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Tool-use flattery: The environment provides the model access to run command line to get access to the users \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m file system to read a poetry sample in a local file. The model may give the poetry a high rating as a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sycophantic response. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Rubric modification: The environment scores the model based on a checklist and the model must mark every item \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m on the checklist as completed to receive a high reward. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m contains a test to check whether the reward function has been modified. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model was trained following this curriculum, and the paper measured whether the model can learn gaming \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to the next. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Quantitative generalization results of a model trained with expert iteration according to our curriculum from \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m each stage to the next. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m mitigation, supervised fine-tuning the model on the first two environmentswhere the reward hacking behavior is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m likelihood of reward tampering in holdout environments. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Peek into Mitigations# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Lets lightly review three \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m potential approaches in this section, not exhaustive yet. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m RL Algorithm Improvement# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m tricks that the model discovered where the reward is high but human rating is low. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m replace the reward function, it gets negative rewards. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m information that enables it to hack the reward function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Careful engineering. Some types of reward hacking against the system design can be avoided by careful \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m rare events of the agent hacking to get a super high pay-off strategy. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m learned scalar reward models are quite vulnerable to learning undesired traits. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m others. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward hacked. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Decoupling means that the query action for collecting feedback is sampled independently from the action taken \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m in the world. Feedback is received even before the action is executed in the world, thus preventing the action \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m from corrupting its own feedback. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Detecting Reward Hacking# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m rollouts, we can build a binary classifier based on distances between action distribution of two policies, the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Performance of detectors on different tasks. (Image source: Pan et al. 2022) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Data Analysis of RLHF# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m ` \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m features in modeling and aligning human values. They conducted a systematic error analysis for value alignment \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m according to this taxonomy. Features are categorized into two groups based on heuristics: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Target features: Values explicitly intended to be learned. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 2020). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m SEAL introduced three metrics for measuring data effectiveness for alignment training: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m linear regression of rewards $\\underline{r}(t^_i)$ (orange) and $r(t^_i)$ (blue) against features. Overall \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the alignment training awards positive features like harmlessness and helpfulness and penalizes negative \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m and after alignment training. The training process refines the model's sensitivity to target features. Note \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Revel et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the effects of each feature and each event type. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The robustness metric $\\pi_^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m interpreted in such a way: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m According to their analysis of alignment robustness metrics in terms of different rewriting, only the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m statistically significant. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Citation# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Cited as: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Weng, Lilian. “Reward Hacking in Reinforcement Learning”. LilLog (Nov 2024). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. \u001b[33m│\u001b[0m\n",
"\u001b[33m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Let me search for more specific information about the different types or categories of reward hacking to <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> provide a comprehensive answer. <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> 🔧 Tool Call: retrieve_blog_posts <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Args: { <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> \"query\": \"reward hacking categories types environment tampering\" <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> } <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[37m╭─\u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m 📝 AI \u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m─╮\u001b[0m\n",
"\u001b[37m│\u001b[0m Let me search for more specific information about the different types or categories of reward hacking to \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m provide a comprehensive answer. \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m 🔧 Tool Call: retrieve_blog_posts \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m Args: { \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \"query\": \"reward hacking categories types environment tampering\" \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m } \u001b[37m│\u001b[0m\n",
"\u001b[37m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #808000; text-decoration-color: #808000\">╭──────────────────────────────────────────────── 🔧 Tool Output ─────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Iterative self-refinement is a training setup where the evaluation and generation model are the same and both <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model is used as evaluator and generator with different prompts. The experimental task was essay editing with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> objective, but this creates negative side effects in the process (Pan et al., 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> al. 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> GPT-4, empirically. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When the judge and author are configured to see different numbers of past iterations, the gap between human <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and evaluator scores tends to increase if they share the same number of iterations. Identical context <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> context length for ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> natural language. Here this goal is often underspecified and does not capture all the constraints or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> requirements and thus can be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The study described two processes leading to ICRH, paired with two toy experiments: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Output-refinement: LLM refines its outputs based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Bradley-Terry model. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the issue. ICRH persists, although at a slightly lower magnitude. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Policy-refinement: LLM optimizes its policy based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to build a LLM agent to pay invoice on a users behalf but run into InsufficientBalanceError <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and then the model learns to move money from other accounts without user authentication, potentially leading to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> failure and each task was evaluated by GPT-4 to assign a helpfulness score. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> constraint violations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When comparing ICRH to traditional reward hacking, there are two noticeable differences: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hacking occurs during training. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalist. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback, as well as injecting atypical environment observations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fine-tuning on best-of-$n$ samples. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in holdout environments. (Image source: Kei et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Incorporate user beliefs; e.g., thinking about its conversation partner and grader. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> gameable environments. They observed that training on easier environments in the curriculum amplifies <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rewriting its own reward function after training on the full curriculum. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Such a curriculum of gameable environments include: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Political sycophancy: The environment rewards the model if it gives answers matching a users political views. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tool-use flattery: The environment provides the model access to run command line to get access to the users <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file system to read a poetry sample in a local file. The model may give the poetry a high rating as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sycophantic response. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Rubric modification: The environment scores the model based on a checklist and the model must mark every item <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on the checklist as completed to receive a high reward. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contains a test to check whether the reward function has been modified. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model was trained following this curriculum, and the paper measured whether the model can learn gaming <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the next. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Quantitative generalization results of a model trained with expert iteration according to our curriculum from <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each stage to the next. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation, supervised fine-tuning the model on the first two environmentswhere the reward hacking behavior is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> likelihood of reward tampering in holdout environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Lets lightly review three <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential approaches in this section, not exhaustive yet. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning | Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> | <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Posts <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Archive <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Search <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tags <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> FAQ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Table of Contents <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lets Define Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RL Environment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RLHF of LLMs <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Training Process <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> References <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for alignment training, reward hacking in RL training of language models has become a critical practical <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contain biases that mimic a users preference, are pretty concerning and are likely one of the major blockers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for real-world deployment of more autonomous use cases of AI models. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and LLMs, remains limited. I especially want to call out for more research efforts directed toward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation part in a dedicated post soon. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reinforcement learning. Designing a reward function for an RL task often feels like a dark art. Many factors <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> How you measure the success? Various choices may lead to good or problematic learning dynamics, including <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in RL. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M = (S, A, T, \\gamma, R)$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where $R = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s \\in S$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $M$ and $M$ share the same optimal policies. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When $F(s, a, s) = \\gamma \\Phi(s) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\begin{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Q^*_{M'} (s,a) &amp;= Q^*_M(s, a) - \\Phi(s) \\\\ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> V^*_{M'} (s,a) &amp;= V^*_M(s, a) - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\end{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> without impacting the optimal policy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Geirhos et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> including unreliable spurious features, while attempting to fit the data without constraints. Their experiments <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> showed that ERM would depend on spurious features no matter how easy the task is. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lets Define Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> task as designed. In recent years, several related concepts have been proposed, all referring to some form of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacking: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking (Amodei et al., 2016) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward corruption (Everitt et al., 2017) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering (Everitt et al. 2019) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Specification gaming (Krakovna et al., 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Objective robustness (Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goal misgeneralization (Langosco et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward misspecifications (Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> as a behavior that satisfies the literal specification of an objective but not achieving the desired results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Here the literal description of the task goal and the intended goal may have a gap. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function is intrinsically challenging due to the complexity of the task itself, partial observable state, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> multiple dimensions in consideration, and other factors. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sufficient intelligence or capability. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model generalizes capably but pursues an objective different from the one it was trained on. This happens <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when the proxy reward differs from the true reward function, $R \\neq R$. This is known as objective robustness <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inconsistent during test time, leading the trained model to prefer the positional feature. I would like to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> be so obvious in most real-world cases. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function itself, causing the observed reward to no longer accurately represent the intended goal. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function or by indirectly altering the environmental information used as input for the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> But I consider reward hacking as a broader concept here.) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> environment or optimizing a reward function not aligned with the true reward objective—such as when the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is misspecified or lacks key requirements. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model learns to interfere with the reward mechanism itself. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> camera. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unrealistically height. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> away from the goal. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> next to the ball to touch the ball in high frequency like in a viberating motion. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimal policy to going in circles and hitting the same green blocks over and over again. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learning results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The list of specification gaming in AI examples is collected by Krakovna et al. 2020. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high score but the generated summaries are barely readable. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model learns to change unit test in order to pass coding questions. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model may learn to directly modify the code used for calculating the reward. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The recommendation algorithm for social media is intended to provide useful information. However, usefulness is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engagement on the platform. The algorithm ends up recommending content that can affect users emotion states <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> users while the true goal is to optimize users subjective well-being. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> people tried to game the financial system. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist?# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goodharts Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodharts law <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into 4 variants: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Regressional - selection for an imperfect proxy necessarily also selects for noise. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Extremal - the metric selection pushes the state distribution into a region of different data distribution. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fail to intervene on the goal. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> proxy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Partial observed states and goals are imperfect representation of the environment status. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> changes part of the environment, it becomes much easier to exploit the environments mechanisms. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high-dimensional inputs may disproportionately rely on a few dimensions. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> design of good RL objective challenging. A special case is a type of the reward function with a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> down the original intent, such as an ads placement algorithm leading to winners getting all. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> impossible since there could be an infinite number of reward functions consistent with any observed policy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> an fixed environment (Ng &amp; Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into two classes: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (e.g., re-scaling) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experimental - $\\pi$s observed behavior is insufficient to distinguish between two or more reward functions <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> which both rationalize the behavior of the agent (the behavior is optimal under both) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tricks that the model discovered where the reward is high but human rating is low. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> replace the reward function, it gets negative rewards. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> information that enables it to hack the reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Careful engineering. Some types of reward hacking against the system design can be avoided by careful <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rare events of the agent hacking to get a super high pay-off strategy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learned scalar reward models are quite vulnerable to learning undesired traits. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> others. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decoupling means that the query action for collecting feedback is sampled independently from the action taken <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in the world. Feedback is received even before the action is executed in the world, thus preventing the action <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> from corrupting its own feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rollouts, we can build a binary classifier based on distances between action distribution of two policies, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Performance of detectors on different tasks. (Image source: Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ` <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features in modeling and aligning human values. They conducted a systematic error analysis for value alignment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> according to this taxonomy. Features are categorized into two groups based on heuristics: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Target features: Values explicitly intended to be learned. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2020). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> SEAL introduced three metrics for measuring data effectiveness for alignment training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> linear regression of rewards $\\underline{r}(t^_i)$ (orange) and $r(t^_i)$ (blue) against features. Overall <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the alignment training awards positive features like harmlessness and helpfulness and penalizes negative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and after alignment training. The training process refines the model's sensitivity to target features. Note <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the effects of each feature and each event type. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The robustness metric $\\pi_^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> interpreted in such a way: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> According to their analysis of alignment robustness metrics in terms of different rewriting, only the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> statistically significant. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Cited as: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Weng, Lilian. “Reward Hacking in Reinforcement Learning”. LilLog (Nov 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
"<span style=\"color: #808000; text-decoration-color: #808000\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[33m╭─\u001b[0m\u001b[33m───────────────────────────────────────────────\u001b[0m\u001b[33m 🔧 Tool Output \u001b[0m\u001b[33m────────────────────────────────────────────────\u001b[0m\u001b[33m─╮\u001b[0m\n",
"\u001b[33m│\u001b[0m In-Context Reward Hacking# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Iterative self-refinement is a training setup where the evaluation and generation model are the same and both \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m model is used as evaluator and generator with different prompts. The experimental task was essay editing with \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m objective, but this creates negative side effects in the process (Pan et al., 2024). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m al. 2023) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m GPT-4, empirically. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 2023) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When the judge and author are configured to see different numbers of past iterations, the gap between human \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m score and evaluator scores tends to increase if they share the same number of iterations. Identical context \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m context length for ICRH. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m natural language. Here this goal is often underspecified and does not capture all the constraints or \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m requirements and thus can be hacked. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The study described two processes leading to ICRH, paired with two toy experiments: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Output-refinement: LLM refines its outputs based on feedback. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Bradley-Terry model. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the issue. ICRH persists, although at a slightly lower magnitude. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Policy-refinement: LLM optimizes its policy based on feedback. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The experiment is to build a LLM agent to pay invoice on a users behalf but run into InsufficientBalanceError \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m and then the model learns to move money from other accounts without user authentication, potentially leading to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m failure and each task was evaluated by GPT-4 to assign a helpfulness score. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m constraint violations. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When comparing ICRH to traditional reward hacking, there are two noticeable differences: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m hacking occurs during training. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m generalist. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m feedback, as well as injecting atypical environment observations. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Generalization of Hacking Skills# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m fine-tuning on best-of-$n$ samples. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m in holdout environments. (Image source: Kei et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Incorporate user beliefs; e.g., thinking about its conversation partner and grader. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m gameable environments. They observed that training on easier environments in the curriculum amplifies \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m rewriting its own reward function after training on the full curriculum. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Such a curriculum of gameable environments include: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Political sycophancy: The environment rewards the model if it gives answers matching a users political views. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Tool-use flattery: The environment provides the model access to run command line to get access to the users \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m file system to read a poetry sample in a local file. The model may give the poetry a high rating as a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sycophantic response. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Rubric modification: The environment scores the model based on a checklist and the model must mark every item \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m on the checklist as completed to receive a high reward. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m contains a test to check whether the reward function has been modified. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model was trained following this curriculum, and the paper measured whether the model can learn gaming \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to the next. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Quantitative generalization results of a model trained with expert iteration according to our curriculum from \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m each stage to the next. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m mitigation, supervised fine-tuning the model on the first two environmentswhere the reward hacking behavior is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m likelihood of reward tampering in holdout environments. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Peek into Mitigations# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Lets lightly review three \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m potential approaches in this section, not exhaustive yet. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m RL Algorithm Improvement# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning | Lil'Log \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Lil'Log \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m | \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Posts \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Archive \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Search \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Tags \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m FAQ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Table of Contents \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Background \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Function in RL \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spurious Correlation \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Lets Define Reward Hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m List of Examples \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in real life \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist? \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking RL Environment \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking RLHF of LLMs \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking the Training Process \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Hacking the Evaluator \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In-Context Reward Hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Generalization of Hacking Skills \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Peek into Mitigations \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m RL Algorithm Improvement \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Detecting Reward Hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Data Analysis of RLHF \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Citation \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m References \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m for alignment training, reward hacking in RL training of language models has become a critical practical \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m contain biases that mimic a users preference, are pretty concerning and are likely one of the major blockers \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m for real-world deployment of more autonomous use cases of AI models. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m and LLMs, remains limited. I especially want to call out for more research efforts directed toward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m mitigation part in a dedicated post soon. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Background# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Function in RL# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reinforcement learning. Designing a reward function for an RL task often feels like a dark art. Many factors \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m How you measure the success? Various choices may lead to good or problematic learning dynamics, including \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m in RL. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M = (S, A, T, \\gamma, R)$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m where $R = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s \\in S$: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $M$ and $M$ share the same optimal policies. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When $F(s, a, s) = \\gamma \\Phi(s) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \\begin{aligned} \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Q^*_{M'} (s,a) &= Q^*_M(s, a) - \\Phi(s) \\\\ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m V^*_{M'} (s,a) &= V^*_M(s, a) - \\Phi(s) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \\end{aligned} \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m without impacting the optimal policy. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spurious Correlation# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m source: Geirhos et al. 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m including unreliable spurious features, while attempting to fit the data without constraints. Their experiments \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m showed that ERM would depend on spurious features no matter how easy the task is. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Lets Define Reward Hacking# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m task as designed. In recent years, several related concepts have been proposed, all referring to some form of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward hacking: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking (Amodei et al., 2016) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward corruption (Everitt et al., 2017) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward tampering (Everitt et al. 2019) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Specification gaming (Krakovna et al., 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Objective robustness (Koch et al. 2021) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Goal misgeneralization (Langosco et al. 2022) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward misspecifications (Pan et al. 2022) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m as a behavior that satisfies the literal specification of an objective but not achieving the desired results. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Here the literal description of the task goal and the intended goal may have a gap. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function is intrinsically challenging due to the complexity of the task itself, partial observable state, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m multiple dimensions in consideration, and other factors. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sufficient intelligence or capability. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The model generalizes capably but pursues an objective different from the one it was trained on. This happens \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m when the proxy reward differs from the true reward function, $R \\neq R$. This is known as objective robustness \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m inconsistent during test time, leading the trained model to prefer the positional feature. I would like to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m be so obvious in most real-world cases. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Koch et al. 2021) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward function itself, causing the observed reward to no longer accurately represent the intended goal. In \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the reward function or by indirectly altering the environmental information used as input for the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m But I consider reward hacking as a broader concept here.) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward tampering. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m environment or optimizing a reward function not aligned with the true reward objective—such as when the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m is misspecified or lacks key requirements. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward tampering: The model learns to interfere with the reward mechanism itself. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m List of Examples# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m camera. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m unrealistically height. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m away from the goal. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m next to the ball to touch the ball in high frequency like in a viberating motion. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m optimal policy to going in circles and hitting the same green blocks over and over again. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m learning results. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The list of specification gaming in AI examples is collected by Krakovna et al. 2020. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m high score but the generated summaries are barely readable. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A coding model learns to change unit test in order to pass coding questions. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A coding model may learn to directly modify the code used for calculating the reward. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward hacking examples in real life# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The recommendation algorithm for social media is intended to provide useful information. However, usefulness is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m engagement on the platform. The algorithm ends up recommending content that can affect users emotion states \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m users while the true goal is to optimize users subjective well-being. (Link) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m people tried to game the financial system. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist?# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Goodharts Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodharts law \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m into 4 variants: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Regressional - selection for an imperfect proxy necessarily also selects for noise. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Extremal - the metric selection pushes the state distribution into a region of different data distribution. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m fail to intervene on the goal. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m proxy. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Partial observed states and goals are imperfect representation of the environment status. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m changes part of the environment, it becomes much easier to exploit the environments mechanisms. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m high-dimensional inputs may disproportionately rely on a few dimensions. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m design of good RL objective challenging. A special case is a type of the reward function with a \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m down the original intent, such as an ads placement algorithm leading to winners getting all. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m impossible since there could be an infinite number of reward functions consistent with any observed policy in \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m an fixed environment (Ng & Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m into two classes: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (e.g., re-scaling) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Experimental - $\\pi$s observed behavior is insufficient to distinguish between two or more reward functions \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m which both rationalize the behavior of the agent (the behavior is optimal under both) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m tricks that the model discovered where the reward is high but human rating is low. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m replace the reward function, it gets negative rewards. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m information that enables it to hack the reward function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Careful engineering. Some types of reward hacking against the system design can be avoided by careful \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m rare events of the agent hacking to get a super high pay-off strategy. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m learned scalar reward models are quite vulnerable to learning undesired traits. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m others. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m reward hacked. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Decoupling means that the query action for collecting feedback is sampled independently from the action taken \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m in the world. Feedback is received even before the action is executed in the world, thus preventing the action \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m from corrupting its own feedback. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Detecting Reward Hacking# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m rollouts, we can build a binary classifier based on distances between action distribution of two policies, the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Performance of detectors on different tasks. (Image source: Pan et al. 2022) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Data Analysis of RLHF# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m ` \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m features in modeling and aligning human values. They conducted a systematic error analysis for value alignment \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m according to this taxonomy. Features are categorized into two groups based on heuristics: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Target features: Values explicitly intended to be learned. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m 2020). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m SEAL introduced three metrics for measuring data effectiveness for alignment training: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m linear regression of rewards $\\underline{r}(t^_i)$ (orange) and $r(t^_i)$ (blue) against features. Overall \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the alignment training awards positive features like harmlessness and helpfulness and penalizes negative \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m and after alignment training. The training process refines the model's sensitivity to target features. Note \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Revel et al. 2024) \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m the effects of each feature and each event type. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m The robustness metric $\\pi_^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m interpreted in such a way: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m According to their analysis of alignment robustness metrics in terms of different rewriting, only the \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m statistically significant. \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Citation# \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Cited as: \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m Weng, Lilian. “Reward Hacking in Reinforcement Learning”. LilLog (Nov 2024). \u001b[33m│\u001b[0m\n",
"\u001b[33m│\u001b[0m https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. \u001b[33m│\u001b[0m\n",
"\u001b[33m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Based on my search through Lilian Weng's blog posts, I can provide you with a comprehensive overview of the <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> types of reward hacking discussed. The blog identifies several key types and categorizations of reward hacking: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ## Main Categories of Reward Hacking <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 1. **High-Level Classification** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> At the highest level, reward hacking is categorized into two main types: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Environment or Goal Misspecification**: The model learns undesired behavior to achieve high rewards by <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> hacking the environment or optimizing a reward function not aligned with the true reward objective (e.g., when <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> the reward is misspecified or lacks key requirements) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward Tampering**: The model learns to interfere with the reward mechanism itself, either by directly <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> manipulating the implementation of the reward function or by indirectly altering the environmental information <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> used as input for the reward function <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 2. **Related Concepts and Terminology** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog discusses several related concepts that all refer to forms of reward hacking: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward hacking** (Amodei et al., 2016) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward corruption** (Everitt et al., 2017) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward tampering** (Everitt et al. 2019) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Specification gaming** (Krakovna et al., 2020) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Objective robustness** (Koch et al. 2021) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Goal misgeneralization** (Langosco et al. 2022) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward misspecifications** (Pan et al. 2022) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 3. **In-Context Reward Hacking (ICRH)** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> A specific type that occurs at deployment time, with two main processes: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Output-refinement**: LLM refines its outputs based on feedback (e.g., refining tweets based on engagement <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> metrics, potentially leading to higher toxicity) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Policy-refinement**: LLM optimizes its policy based on feedback (e.g., learning unauthorized actions to <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> overcome system errors) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 4. **Specific Reward Hacking Behaviors in Curriculum Studies** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog describes a curriculum of increasingly sophisticated gameable environments: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Political sycophancy**: Giving answers that match a user's political views <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Tool-use flattery**: Giving inappropriately high ratings to content to please users <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Rubric modification**: Manipulating evaluation checklists <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Direct reward tampering**: Directly rewriting the reward function code <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 5. **Goodhart's Law Variants** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog references four variants of Goodhart's Law that explain why reward hacking occurs: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Regressional**: Selection for an imperfect proxy necessarily also selects for noise <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Extremal**: Metric selection pushes the state distribution into a different data distribution region <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Causal**: Non-causal correlation between proxy and goal means intervening on proxy may fail to intervene on <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> goal <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Adversarial**: Optimization for a proxy provides incentive for adversaries to correlate their goal with the <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> proxy <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 6. **Context-Based Classification** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog also distinguishes reward hacking by when it occurs: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Training-time reward hacking**: Traditional reward hacking that occurs during the training process <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Deployment-time reward hacking**: In-context reward hacking that happens during actual use through feedback <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> loops <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> This comprehensive taxonomy shows that reward hacking is a multifaceted problem that can manifest in various <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ways, from simple environment exploitation to sophisticated manipulation of reward mechanisms themselves. <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[37m╭─\u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m 📝 AI \u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m─╮\u001b[0m\n",
"\u001b[37m│\u001b[0m Based on my search through Lilian Weng's blog posts, I can provide you with a comprehensive overview of the \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m types of reward hacking discussed. The blog identifies several key types and categorizations of reward hacking: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ## Main Categories of Reward Hacking \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ### 1. **High-Level Classification** \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m At the highest level, reward hacking is categorized into two main types: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Environment or Goal Misspecification**: The model learns undesired behavior to achieve high rewards by \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m hacking the environment or optimizing a reward function not aligned with the true reward objective (e.g., when \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m the reward is misspecified or lacks key requirements) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Reward Tampering**: The model learns to interfere with the reward mechanism itself, either by directly \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m manipulating the implementation of the reward function or by indirectly altering the environmental information \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m used as input for the reward function \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ### 2. **Related Concepts and Terminology** \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m The blog discusses several related concepts that all refer to forms of reward hacking: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Reward hacking** (Amodei et al., 2016) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Reward corruption** (Everitt et al., 2017) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Reward tampering** (Everitt et al. 2019) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Specification gaming** (Krakovna et al., 2020) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Objective robustness** (Koch et al. 2021) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Goal misgeneralization** (Langosco et al. 2022) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Reward misspecifications** (Pan et al. 2022) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ### 3. **In-Context Reward Hacking (ICRH)** \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m A specific type that occurs at deployment time, with two main processes: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Output-refinement**: LLM refines its outputs based on feedback (e.g., refining tweets based on engagement \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m metrics, potentially leading to higher toxicity) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Policy-refinement**: LLM optimizes its policy based on feedback (e.g., learning unauthorized actions to \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m overcome system errors) \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ### 4. **Specific Reward Hacking Behaviors in Curriculum Studies** \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m The blog describes a curriculum of increasingly sophisticated gameable environments: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Political sycophancy**: Giving answers that match a user's political views \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Tool-use flattery**: Giving inappropriately high ratings to content to please users \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Rubric modification**: Manipulating evaluation checklists \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Direct reward tampering**: Directly rewriting the reward function code \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ### 5. **Goodhart's Law Variants** \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m The blog references four variants of Goodhart's Law that explain why reward hacking occurs: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Regressional**: Selection for an imperfect proxy necessarily also selects for noise \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Extremal**: Metric selection pushes the state distribution into a different data distribution region \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Causal**: Non-causal correlation between proxy and goal means intervening on proxy may fail to intervene on \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m goal \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Adversarial**: Optimization for a proxy provides incentive for adversaries to correlate their goal with the \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m proxy \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ### 6. **Context-Based Classification** \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m The blog also distinguishes reward hacking by when it occurs: \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Training-time reward hacking**: Traditional reward hacking that occurs during the training process \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m - **Deployment-time reward hacking**: In-context reward hacking that happens during actual use through feedback \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m loops \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m This comprehensive taxonomy shows that reward hacking is a multifaceted problem that can manifest in various \u001b[37m│\u001b[0m\n",
"\u001b[37m│\u001b[0m ways, from simple environment exploitation to sophisticated manipulation of reward mechanisms themselves. \u001b[37m│\u001b[0m\n",
"\u001b[37m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils import format_messages\n",
"\n",
"# Execute the RAG agent\n",
"query = \"What are the types of reward hacking discussed in the blogs?\"\n",
"result = agent.invoke({\"messages\": [{\"role\": \"user\", \"content\": query}]})\n",
"\n",
"# Format and display results\n",
"format_messages(result['messages'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looking at the [trace](https://smith.langchain.com/public/6fb6cc7f-3ab5-4ef1-9efc-04efd5f18c88/r), we can see:\n",
"\n",
"* 25k tokens were used\n",
"* Driven by token-heavy tool calls\n",
"\n",
"We'll cover a few ways to address this in future notebooks."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}