All roles (web, worker) are essentially Windows Server. Web and Worker roles are nearly identical:
Web roles are Windows Server VMs with IIS enabled
Worker roles are Windows Server VMs with IIS disabled (and you could manually enable it)
VM roles are Windows Server 2008 images you construct locally via Hyper-V and upload to Azure (and are now discontinued and no longer available as of May 31, 2013
Virtual Machines are Windows or Linux images created in Azure, stored as a vhd in your own storage, and have several enhancements over VM role. For example: since the vhd is in your own storage account, you can easily create an image template from your vhd, copy it to a new vhd, or even upload it to VM Depot (Linux only).
With Web and Worker roles, the OS and related patches are taken care of for you; you build your app's components without having to manage a VM.
With Virtual Machines, you simply pick an OS image from a gallery, which gets created for you and stored as a vhd in blob storage. You then RDP/ssh and set it up how you like.