If your accuracy keeps decreasing after a while, there might be still a bug in your code.
I’ve seen this behavior e.g. if I forgot to zero out the gradients. Could you check it?
Also, could you post your training code so that we could have a look?
The batch size depends a bit on your model. If you use batch norm layers, I would use a batch size of at least 16.
Yes, usually you should lower the learning rate after a while.
However, there are some modern learning rate schedules, e.g. cyclical learning rates, which seem to work a bit better (at least for certain use cases).