A bitmap is where your array uses some unused space in the header to track changes to blocks that haven't synchronised. The bitmap is split up and covers a certain amount of the space of your array. If there are "dirty" (ie uncommitted) changes in that portion of the array it will be marked with a 1 until it cleanly syncs.
Bitmaps are good in that if you lost power, and the drives aren't in sync, it does not need to resync the entire array at the next boot. Instead it will check the bitmap for dirty pages and only sync those. This is why it changes constantly, it will increase or decrease as data is changed and then synced.
Also I should add the name is a write-intent bitmap and the idea is that the flag is set before write occurs. This is much like a journal for modern filesystems although it only journals in the sense that it marks areas that will change. The number may swing a lot if there's a lot of activity, it's not an issue with the array but a symptom of either small bitmap/large array (where one bit covers a large portion of your array) or heavy writes.
One way to reduce the number of dirty pages is to use a file for the write intent bitmap instead of using the array header space. The file is much bigger but depends on an ext2 boot filesystem, and therefore more granular with the bitmap and generates less high numbers in the output.
Have a read on write-intent bitmaps and md to get an idea of how it all works.