I'd simply like to expand on Andrew's answer and mention that the routing algorithm used to find the various hops towards your final destination payment will also impact your resulting fee.
The idea is that channels sometimes become almost exhausted - where most of the money is pushed towards one direction. This is bad for people because it would mean that their channels cannot be reused; you'd have to open a new channel for new payments, hence on-chain transactions.
If a channel is almost exhausted, the person of the channel with less money (exhausted towards her) will want payments routed towards her to allow her channel to be full again so she can make more payments on that same channel without reopening a new one.
She will actually want to pay if someone chooses her channel to route their payments -- hence sometimes you'll have negative fees.
This means that a routing algorithm will actually look for paths where you actually get paid (negative fees) because you'd be rebalancing some channels along the way.
Can the fee for a given node be reactive to other node fees? Is this system akin to the mempool bidding system of onchain? Could fees be more related to how much liquidity a node has? i.e. higher liquidity nodes have higher fees – arshbot – 2018-01-17T03:11:13.863
1Certainly. The fee is set by the operator, and they can change it as they want. Once a payment begins routing through them, the fee is fixed for that particular payment so the node operator can't change it for that payment. But they can change it for future payments. – Andrew Chow – 2018-01-17T03:14:16.023