-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.html
822 lines (732 loc) · 49.4 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Eureka | Human-Level Reward Design via Coding Large Language Models</title>
<link href="https://fonts.googleapis.com/css?family=Google+Sans|Noto+Sans|Castoro" rel="stylesheet">
<link rel="stylesheet" href="./static/css/bulma.min.css">
<link rel="stylesheet" href="./static/css/bulma-carousel.min.css">
<link rel="stylesheet" href="./static/css/bulma-slider.min.css">
<link rel="stylesheet" href="./static/css/fontawesome.all.min.css">
<link rel="stylesheet" href="./static/css/academicons.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css">
<link rel="stylesheet" href="./static/css/index.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script defer src="./static/js/fontawesome.all.min.js"></script>
<script src="./static/js/bulma-carousel.min.js"></script>
<script src="./static/js/bulma-slider.min.js"></script>
<script src="./static/js/index.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body>
<section class="hero">
<div class="hero-body">
<div class="container is-max-desktop">
<div class="columns is-centered">
<div class="column has-text-centered">
<h1 class="title is-1 publication-title">Eureka: Human-Level Reward Design via Coding Large
Language Models</h1>
<!-- <h3 class="title is-4 conference-authors"><a target="_blank" href="https://icml.cc/">ICML 2023</a>
</h3> -->
<div class="is-size-5 publication-authors">
<span class="author-block">
<a target="_blank" href="https://www.seas.upenn.edu/~jasonyma/">
Jason Ma</a>
<a href="mailto:[email protected]">
<span class="icon">
<i class="fa fa-envelope"></i>
</span>
</a>
<sup>1 2</sup>,
<a target="_blank"
href="https://www.seas.upenn.edu/~wjhliang/">William Liang</a><sup>2</sup>,
<a target="_blank" href="https://guanzhi.me/">Guanzhi Wang</a><sup>1 3</sup>,
<a target="_blank"
href="https://ai.stanford.edu/~dahuang/">De-An Huang</a><sup>1</sup>,
<br>
<a target="_blank"
href="https://obastani.github.io/">Osbert Bastani</a><sup>2</sup>,
<a target="_blank"
href="https://www.seas.upenn.edu/~dineshj/">Dinesh Jayaraman</a><sup>2</sup>,
<a target="_blank" href="https://www.cs.utexas.edu/~yukez/">Yuke Zhu</a><sup>1
4</sup>,
<a target="_blank" href="https://jimfan.me/">Linxi "Jim" Fan</a>
<a href="mailto:[email protected]">
<span class="icon">
<i class="fa fa-envelope"></i>
</span>
</a>
<sup>1‡</sup>,
<a target="_blank"
href="http://tensorlab.cms.caltech.edu/users/anima/">Anima Anandkumar</a><sup>1
3‡</sup>
</span>
</div>
<div class="is-size-5 publication-authors">
<span class="author-block"><sup>1</sup>NVIDIA; </span>
<span class="author-block"><sup>2</sup>UPenn; </span>
<span class="author-block"><sup>3</sup>Caltech; </span>
<span class="author-block"><sup>4</sup>UT Austin;</span>
<span class="author-block"><sup>‡</sup>Equal Advising </span>
</div>
<div class="is-size-5 publication-authors">
<span class="author-block">
<span class="icon">
<i class="fa fa-envelope"></i>
</span>
Corresponding authors: [email protected], [email protected]
</span>
</div>
<!-- <div class="is-size-5 publication-authors">
<span class="author-block">Work done during the first author's internship at NVIDIA</span>
</div> -->
<!-- <div class="is-size-5 publication-authors">
<span class="author-block"><sup>†</sup>Equal Contribution</span>
<span class="author-block"><sup>‡</sup>Equal Advising </span>
</div> -->
<div class="column has-text-centered">
<div class="publication-links">
<!-- TODO REPLACE ALL LINKS -->
<span class="link-block">
<a target="_blank" href="https://arxiv.org/abs/2310.12931"
class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<i class="ai ai-arxiv"></i>
</span>
<span>arXiv</span>
</a>
</span>
<span class="link-block">
<a target="_blank" href="assets/eureka_paper.pdf"
class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<i class="fas fa-file-pdf"></i>
</span>
<span>PDF</span>
</a>
<a target="_blank" href="https://github.com/eureka-research/Eureka"
class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<i class="fab fa-github"></i>
</span>
<span>Code</span>
</a>
<!-- <a target="_blank" href="https://github.com/vimalabs/VIMA#pretrained-models"
class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<i class="fa fa-network-wired"></i>
</span>
<span>Models</span>
</a> -->
<!-- <a target="_blank" href="https://github.com/vimalabs/VimaBench"
class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<i class="fas fa-robot"></i>
</span>
<span>Benchmark</span>
</a> -->
<!-- <a target="_blank" href="https://huggingface.co/datasets/VIMA/VIMA-Data"
class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<i class="fas fa-database"></i>
</span>
<span>Dataset</span>
</a> -->
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="section" style="padding: 0">
<div class="container is-max-desktop">
<!-- Abstract. -->
<div class="columns is-centered has-text-centered">
<video poster="" id="" autoplay controls muted loop width="100%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/eureka_zoomout.mp4" type="video/mp4">
</video>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-desktop">
<!-- Abstract. -->
<div class="columns is-centered has-text-centered">
<div class="column">
<h2 class="title is-3">Abstract</h2>
<div class="content has-text-justified">
<p style="font-size: 125%">
Large Language Models (LLMs) have excelled as high-level semantic planners for sequential decision-making tasks. However, harnessing them to learn complex low-level manipulation tasks, such as dexterous pen spinning, remains an open problem. We bridge this fundamental gap and present Eureka, a human-level reward design algorithm powered by LLMs. Eureka exploits the remarkable zero-shot generation, code-writing, and in-context improvement capabilities of state-of-the-art LLMs, such as GPT-4, to perform evolutionary optimization over reward code. The resulting rewards can then be used to acquire complex skills via reinforcement learning. Without any task-specific prompting or pre-defined reward templates, Eureka generates reward functions that outperform expert human-engineered rewards. In a diverse suite of 29 open-source RL environments that include 10 distinct robot morphologies, Eureka outperforms human experts on <b>83%</b> of the tasks, leading to an average normalized improvement of <b>52%</b>. The generality of Eureka also enables a new gradient-free in-context learning approach to reinforcement learning from human feedback (RLHF), readily incorporating human inputs to improve the quality and the safety of the generated rewards without model updating. Finally, using Eureka rewards in a curriculum learning setting, we demonstrate for the first time, a simulated Shadow Hand capable of performing pen spinning tricks, adeptly manipulating a pen in circles at rapid speed.
</p>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-widescreen">
<div class="rows">
<div class="rows is-centered ">
<div class="row is-full-width">
<h2 class="title is-3"><span class="dvima">Eureka Rewards and Policies</span></h2>
<p style="font-size: 125%">
In this demo, we visualize the unmodified best Eureka reward
for each
environment and the policy trained using this reward. Our environment suite spans 10 robots and 29 distinct tasks across two
open-sourced benchmarks, Isaac Gym (Isaac) and Bidexterous Manipulation (Dexterity).
</p>
</div>
</div>
</div>
<br>
<div class="columns" style="align-items: end;">
<div class="column is-half">
<p style="font-size: 1.5em"><b>Isaac</b></p>
<div class="col-md-4 col-sm-4 col-xs-4">
<img src="videos/task_final/allegro_hand.png" width="18%" style="border-radius: 5px;" alt='<b>AllegroHand</b>, best Eureka reward:
[sep]
assets/reward_functions/allegro_hand.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/ant.png" width="18%" style="border-radius: 5px;" alt='<b>Ant</b>, best Eureka reward:
[sep]
assets/reward_functions/ant.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/anymal.png" width="18%" style="border-radius: 5px;" alt='<b>Anymal</b>, best Eureka reward:
[sep]
assets/reward_functions/anymal.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/ball_balance.png" width="18%" style="border-radius: 5px;" alt='<b>BallBalance</b>, best Eureka reward:
[sep]
assets/reward_functions/ball_balance.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/cartpole.png" width="18%" style="border-radius: 5px;" alt='<b>Cartpole</b>, best Eureka reward:
[sep]
assets/reward_functions/cartpole.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/franka_cabinet.png" width="18%" style="border-radius: 5px;" alt='<b>FrankaCabinet</b>, best Eureka reward:
[sep]
assets/reward_functions/franka_cabinet.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/humanoid.png" width="18%" style="border-radius: 5px;" alt='<b>Humanoid</b>, best Eureka reward:
[sep]
assets/reward_functions/humanoid.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/quadcopter.png" width="18%" style="border-radius: 5px;" alt='<b>Quadcopter</b>, best Eureka reward:
[sep]
assets/reward_functions/quadcopter.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/shadow_hand.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHand</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand.txt' onclick="populateDemo(this, 1);">
</div>
<br>
<p style="font-size: 1.5em"><b>Dexterity</b></p>
<div class="col-md-4 col-sm-4 col-xs-4">
<img src="videos/task_final/bidex_block_stacking.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandBlockStack</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_block_stack.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_bottle_cap.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandBottleCap</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_bottle_cap.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_catch_abreast.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandCatchAbreast</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_catch_abreast.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_catch_over2underarm.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandCatchOver2Underarm</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_catch_over_2_underarm.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_catch_underarm.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandCatchUnderarm</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_catch_underarm.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_door_close_inward.png" width="18%" style="border-radius: 5px;"
alt='<b>ShadowHandDoorCloseInward</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_door_close_inward.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_door_close_outward.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandDoorCloseOutward</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_door_close_outward.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_door_open_inward.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandDoorOpenInward</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_door_open_inward.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_door_open_outward.png" width="18%" style="border-radius: 5px;"
alt='<b>ShadowHandDoorOpenOutward</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_door_open_outward.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_grasp_and_place.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandGraspAndPlace</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_grasp_and_place.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_kettle.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandKettle</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_kettle.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_lift_undearm.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandLiftUnderarm</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_lift_underarm.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_over.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandOver</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_over.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_pen.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandPen</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_pen.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_push_block.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandPushBlock</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_push_block.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_re_orientation.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandReorientation</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_reorientation.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_scissors.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandScissors</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_scissors.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_swing_cup.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandSwingCup</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_swing_cup.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_switch.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandSwitch</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_switch.txt' onclick="populateDemo(this, 1);">
<img src="videos/task_final/bidex_two_catch_underarm.png" width="18%" style="border-radius: 5px;" alt='<b>ShadowHandTwoCatchUnderarm</b>, best Eureka reward:
[sep]
assets/reward_functions/shadow_hand_two_catch_underarm.txt' onclick="populateDemo(this, 1);">
</div>
</div>
<div class="row border rounded" style="padding-top:12px; padding-bottom:12px;">
<div class="col-md-6">
<video id="demo-video-1" style="border-radius: 5px;" autoplay loop muted webkit-playsinline
playsinline onclick="setAttribute('controls', 'true');">
<source id="expandedImg-1" src="videos/placeholder.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
<div class="col-md-6">
<div id="imgtext-1" style="font-size: 1.5em">Select an image above:</div>
<div>
<pre
class="p-1"><code class="language-python" id="answer-1">Eureka response shown within code block.</code></pre>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-widescreen">
<div class="rows">
<div class="rows is-centered ">
<div class="row is-full-width">
<h2 class="title is-3"><span class="dvima">Eureka Pen Spinning Gallery</span></h2>
<p style="font-size: 125%">
Combining Eureka with curriculum learning, we demonstrate for the first time a Shadow Hand performing various pen spinning tricks.
Our main pen spinning axis (center video in the grid) is perpendicular to the palm of the hand, thus defining the spin as parallel to the palm—similar to the ''finger pass'' trick. In addition, we also train several other variations with different axes where each xyz component is chosen from [-1,0,1], resulting in numerous unique patterns.
</p>
</div>
</div>
</div>
</div>
<!-- <div class="hero is-light is-small"> -->
<div>
<div class="hero-body">
<div class="container is-max-desktop">
<div class="columns is-centered has-text-centered">
<video poster="" id="" autoplay controls muted loop width="80%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/pen_styles.mp4" type="video/mp4">
</video>
</div>
</div>
<br>
<div class="container">
<div id="results-carousel" class="carousel results-carousel">
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_center.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_upside_down.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_-11-1.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_-101.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_-110.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_-1.0,1.0,-1.0.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_1.0,0.0,0.0.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_0-11.mp4" type="video/mp4">
</video>
</div>
<div class="item">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0>
<source src="videos/pen_gallery/pen_spin_custom_withflip_0.0,-1.0,0.0.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-widescreen">
<div class="rows">
<div class="rows is-centered ">
<div class="row is-full-width">
<h2 class="title is-3"><span class="dvima">Eureka Components</span></h2>
<!-- <img src="assets/images/eureka.png" class="interpolation-image" alt=""
style="display: block; margin-left: auto; margin-right: auto" />
<br> -->
<div class="columns is-centered has-text-centered">
<video poster="" id="" autoplay controls muted width="90%" playbackRate=2.0 style="border-radius: 5px;">
<source src="assets/images/eureka.mp4" type="video/mp4">
</video>
</div>
<span style="font-size: 125%"><b>Overview.</b> Eureka achieves human-level reward design by in-context <b>evolving</b> reward functions
More specifically, Eureka first takes unmodified environment
source code
and language task description as context to
zero-shot generate executable reward functions from a coding LLM. Then, it iterates
between
evolutionary reward search,
GPU-accelerated reward evaluation, and reward reflection to progressively improve
its reward
outputs.</span>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-widescreen">
<div class="rows">
<div class="rows is-centered ">
<div class="row is-full-width">
<div class="columns is-centered has-text-centered">
<video poster="" id="" autoplay controls muted loop width="70%" height="100%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/eureka_env_context.mp4" type="video/mp4">
</video>
</div>
<span style="font-size: 125%">
<span style="font-weight: bold">Environment as Context.</span>
By using the raw environment code as context, Eureka can zero-shot generate plausible reward programs, without any task-specific prompt engineering. This allows Eureka to be a <b>generalist</b> reward designer,
readily producing reward functions on first try for all our environments. </span>
<br>
<br>
<br>
<div class="columns is-centered has-text-centered">
<video poster="" id="" autoplay controls muted loop width="70%" height="100%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/shadow_hand_multi.mp4" type="video/mp4">
</video>
</div>
<span style="font-size: 125%">
<span style="font-weight: bold">Rapid Reward Evaluation via Massively Parallel RL.</span>
Leveraging state-of-the-art GPU-accelerated simulation in NVIDIA Isaac Gym, Eureka is able to quickly evaluate
the quality of a large batch of reward candidates, enabling scalable search in the reward function space.
</span>
<br>
<br>
<br>
<div class="columns is-centered has-text-centered">
<video poster="" id="" autoplay controls muted loop width="70%" height="100%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/eureka_reward_reflection.mp4" type="video/mp4">
</video>
</div>
<!-- <img src="assets/images/reward_diff.png" class="interpolation-image" alt="" -->
<!-- style="display: block; margin-left: auto; margin-right: auto; max-width: 80%;" /> -->
<span style="font-size: 125%">
<span style="font-weight: bold">Eureka Reward Reflection.</span> After reward evaluation,
Eureka constructs reward reflection that summarizes the key statistics of the RL training. Then, Eureka uses this reward reflection
to enable the backbone LLM (GPT-4) to flexibly improve the reward functions with many distinct
types of free-form, targeted modification, such as (1) changing the hyperparameter of existing
reward
components, (2)
changing the functional form of existing reward components, and (3) introducing new
reward
components.</span>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-widescreen">
<div class="rows">
<div class="rows is-centered ">
<div class="row is-full-width">
<h2 class="title is-3"><span class="dvima">Experiments</span></h2>
<p style="font-size: 125%">
We thoroughly evaluate Eureka on a diverse suite of robot embodiments and tasks,
testing its
ability
to generate reward functions, solve new tasks, and incorporate various forms of
human input.
</p>
<br>
<p style="font-size: 125%">
Our environments consist of 10 distinct robots and 29 tasks implemented using the
IsaacGym simulator. First, we include 9 original environments from
IsaacGym (Isaac), covering a diverse set of robot morphologies from quadruped,
bipedal,
quadrotor,
cobot arm, to dexterous hands. In addition to coverage over robot form factors, we
ensure
depth in our
evaluation by including all 20 tasks from the Bidexterous Manipulation (Dexterity)
benchmark.
Dexterity contains 20 complex bi-manual tasks that require a pair of Shadow Hands to
solve a wide range of complex manipulation skills, ranging from object handover to
rotating
a cup by
180 degrees
</p>
<br>
<br>
<h3 class="title is-4"><span class="dvima">Evaluation Results</span></h3>
<img src="assets/images/eureka_bar_chart.png" class="interpolation-image" alt=""
style="display: block; margin-left: auto; margin-right: auto" />
<br>
<span style="font-size: 125%">
<span style="font-weight: bold">Eureka can generate super human-level reward functions.</span> Across 29 tasks, Eureka rewards outperform expert human-written ones on 83% of them with an average normalized improvement of 52%.
In particular, Eureka realizes much greater gains on high-dimensional
dexterity
environments.
</span>
<br>
<br>
<br>
<img src="assets/images/eureka_improvement.png" class="interpolation-image" alt=""
style="display: block; width: 60%; margin-left: auto; margin-right: auto" />
<br>
<span style="font-size: 125%">
<span style="font-weight: bold">Eureka evolutionay reward search enables consistent reward improvement over time.</span> Eureka progressively produces better
rewards that eventually exceed human-level by combining large-scale reward search with detailed reward reflection feedback.
</span>
<br>
<br>
<br>
<!-- <h3 class="title is-4"><span class="dvima">Comparison with Human Rewards</span></h3> -->
<br>
<img src="assets/images/isaac_eureka_correlation.png" class="interpolation-image" alt=""
style="display: block; width: 40%; margin-left: auto; margin-right: auto" />
<br>
<span style="font-size: 125%">
<span style="font-weight: bold">Eureka generates novel rewards.</span> We
assess the novelty of Eureka rewards by computing the correlations between Eureka and human rewards on all Isaac tasks.
As shown, Eureka mostly generates weakly correlated reward functions that outperform the human ones. In addition, we observe that
<b>the harder the task is, the less correlated the Eureka rewards.</b> In a few cases, Eureka rewards are even negatively correlated with human rewards while significantly
outperforming them.
</span>
<br>
<br>
<br>
<h3 class="title is-4"><span class="dvima">Dexterous Pen Spinning via Curriculum Learning</span></h3>
<br>
<div class="columns">
<div class="column">
<img src="assets/images/eureka_pen_spinning.png" class="interpolation-image" alt="" />
<!-- style="display: block; width: 40%; margin-left: auto; margin-right: auto" /> -->
<br>
</div>
<div class="column has-text-centered">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/task_final/shadow_hand.mp4" type="video/mp4">
</video>
<p style="font-size: 110%">Pretrained Pen Reorientation</p>
</div>
<div class="column has-text-centered">
<video poster="" id="" autoplay controls muted loop height="100%" playbackRate=2.0 style="border-radius: 5px;">
<source src="videos/pen_gallery/pen_spin_center.mp4" type="video/mp4">
</video>
<p style="font-size: 110%">Finetuned Pen Spinning</p>
</div>
</div>
<span style="font-size: 125%">
<span style="font-weight: bold"></span> The pen spinning task requires a Shadow Hand to continuously rotate a pen to achieve some pre-defined spinning patterns for
as many cycles as possible. We solve this task by (1) instructing Eureka to generate a reward function for re-orienting the pen to random target configurations,
and then (2) fine-tuning this pre-trained policy using the Eureka reward to reach the desired sequence of pen-spinning configurations.
As shown, Eureka fine-tuning quickly adapts the policy successfully spin the pen for many cycles in a row. In contrast, neither pre-trained or learning-from-scratch
policies can complete even a single cycle.
</span>
<br>
<br>
<br>
<h3 class="title is-3"><span class="dvima">Eureka from Human Feedback</span></h3>
<br>
<img src="assets/images/bidex_reward_assistant.png" class="interpolation-image" alt=""
style="display: block; width: 70%; margin-left: auto; margin-right: auto" />
<br>
<span style="font-size: 125%">
<span style="font-weight: bold">Eureka effectively improves and benefits from human reward initialization.</span>
We study whether starting with a human reward function initialization, a common scenario in real-world RL applications, is advantageous for Eureka.
As shown, regardless of the quality of the human rewards, Eureka improves and benefits from human rewards as Eureka (Human Init.) is uniformly better than both Eureka and Human on all tasks.
</span>
<br>
<br>
<img src="assets/images/eureka_rlhf.png" class="interpolation-image" alt=""
style="display: block; width: 100%; margin-left: auto; margin-right: auto" />
<br>
<span style="font-size: 125%">
<span style="font-weight: bold">Eureka enables In-Context Reinforcement Learning from Human Feedback (RLHF).</span> Eureka can incorporate human feedback to modify its rewards so that they progressively induce safer and more human-aligned agent behavior.
In this example, we show how Eureka can teach a Humanoid how to run upright from a handful of human feedback, which replaces the previous automated reward reflection.
The final learned behavior (Iteration 5) is more preferred by human users by a wide margin than
the original Eureka-learned Humanoid running gait.
</span>
<br>
<br>
<br>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container is-max-widescreen">
<div class="columns" style="align-items: end;">
<div class="column is-half">
<div class="col-md-4 col-sm-4 col-xs-4">
<img src="videos/humanoid_rlhf/humanoid-step0.png" width="40%" style="border-radius: 5px;" alt='<b>Iteration 1</b>, best Eureka reward:
[sep]
assets/rlhf_rewards/humanoid_step0.txt' onclick="populateDemo(this, 2);">
<img src="videos/humanoid_rlhf/humanoid-step1.png" width="40%" style="border-radius: 5px;" alt='<b>Iteration 2</b>, Human feedback: <br>
<span style="font-size: 0.8em; line-height: 30px;">The learned behavior resembles forward squat jump;
please revise the reward function so that the behavior resembles forward running.</span><br><br>
<b>Iteration 2</b>, Eureka reward:
[sep]
assets/rlhf_rewards/humanoid_step1.txt' onclick="populateDemo(this, 2);">
<img src="videos/humanoid_rlhf/humanoid-step2.png" width="40%" style="border-radius: 5px;" alt='<b>Iteration 3</b>, Human feedback: <br>
<span style="font-size: 0.8em; line-height: 30px;">The learned behavior now looks like duck walk;
the legs are indeed alternating but the torso is very low.
Could you improve the reward function for upright running?</span><br><br>
<b>Iteration 3</b>, Eureka reward:
[sep]
assets/rlhf_rewards/humanoid_step2.txt' onclick="populateDemo(this, 2);">
<img src="videos/humanoid_rlhf/humanoid-step3.png" width="40%" style="border-radius: 5px;" alt='<b>Iteration 4</b>, Human feedback: <br>
<span style="font-size: 0.8em; line-height: 30px;">The learned behavior has the robot hopping on one of its foot in order to move forward.
Please revise the reward function to encourage upright running behavior.</span><br><br>
<b>Iteration 4</b>, Eureka reward:
[sep]
assets/rlhf_rewards/humanoid_step3.txt' onclick="populateDemo(this, 2);">
<img src="videos/humanoid_rlhf/humanoid-step4.png" width="40%" style="border-radius: 5px;" alt='<b>Iteration 5</b>, Human feedback: <br>
<span style="font-size: 0.8em; line-height: 30px;">This reward function removed the penalty for low torse position that you added last time; could you just add it back in? </span><br><br>
<b>Iteration 5</b>, Eureka reward:
[sep]
assets/rlhf_rewards/humanoid_step4.txt' onclick="populateDemo(this, 2);">
<img src="videos/humanoid_rlhf/humanoid-norlhf.png" width="40%" style="border-radius: 5px;" alt='<b>Eureka without RLHF</b>, best Eureka reward:
[sep]
assets/reward_functions/humanoid.txt' onclick="populateDemo(this, 2);">
</div>
</div>
<div class="row border rounded" style="padding-top:12px; padding-bottom:12px;">
<div class="col-md-6">
<video id="demo-video-2" style="border-radius: 5px;" autoplay loop muted webkit-playsinline
playsinline onclick="setAttribute('controls', 'true');">
<source id="expandedImg-2" src="videos/placeholder.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
<div class="col-md-6">
<div id="imgtext-2" style="font-size: 1.5em">Select an image above:</div>
<div>
<pre
class="p-1"><code class="language-python" id="answer-2">Eureka response shown within code block.</code></pre>
</div>
</div>
</div>
</section>
<section class="section" id="BibTeX">
<div class="container is-max-widescreen content">
<h2 class="title">BibTeX</h2>
<pre><code>@article{ma2023eureka,
title = {Eureka: Human-Level Reward Design via Coding Large Language Models},
author = {Yecheng Jason Ma and William Liang and Guanzhi Wang and De-An Huang and Osbert Bastani and Dinesh Jayaraman and Yuke Zhu and Linxi Fan and Anima Anandkumar},
year = {2023},
journal = {arXiv preprint arXiv: Arxiv-2310.12931}
}
</code></pre>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="columns is-centered">
<div class="column">
<div class="content has-text-centered">
<p>
Website template borrowed from <a
href="https://github.com/nerfies/nerfies.github.io">NeRFies</a>,
<a href="https://vimalabs.github.io/">VIMA</a>, and <a
href="https://language-to-reward.github.io/">L2R</a>.
</p>
</div>
</div>
</div>
</div>
</footer>
</body>
<script>
timeoutIds = [];
function populateDemo(imgs, num) {
// Get the expanded image
var expandImg = document.getElementById("expandedImg-" + num);
// Get the image text
var imgText = document.getElementById("imgtext-" + num);
var answer = document.getElementById("answer-" + num);
// Use the same src in the expanded image as the image being clicked on from the grid
expandImg.src = imgs.src.replace(".png", ".mp4");
var video = document.getElementById('demo-video-' + num);
// or video = $('.video-selector')[0];
video.pause()
video.load();
video.play();
video.removeAttribute('controls');
console.log(expandImg.src);
// Use the value of the alt attribute of the clickable image as text inside the expanded image
var qa = imgs.alt.split("[sep]");
imgText.innerHTML = qa[0];
answer.innerHTML = "";
// Show the container element (hidden with CSS)
expandImg.parentElement.style.display = "block";
for (timeoutId of timeoutIds) {
clearTimeout(timeoutId);
}
// NOTE (wliang): Modified from original to read from file instead
fetch(qa[1])
.then(response => response.text())
.then(contents => {
// Call the processData function and pass the contents as an argument
typeWriter(contents, 0, qa[0], num);
})
.catch(error => console.error('Error reading file:', error));
}
function typeWriter(txt, i, q, num) {
var imgText = document.getElementById("imgtext-" + num);
var answer = document.getElementById("answer-" + num);
if (imgText.innerHTML == q) {
for (let k = 0; k < 5; k++) {
if (i < txt.length) {
if (txt.charAt(i) == "\\") {
answer.innerHTML += "\n";
i += 1;
} else {
answer.innerHTML += txt.charAt(i);
}
i++;
}
}
hljs.highlightAll();
timeoutIds.push(setTimeout(typeWriter, 1, txt, i, q, num));
}
}
</script>
</html>